達夢DCA學習筆記

1.檢查glibc 需要高於1.14

rpm -aq|grep glibc

1.規劃賬號(OS)

不建議用root用戶安裝管理。

 創建組:

[root@dm1 grub]# cat /etc/group|grep dinstall
[root@dm1 grub]# groupadd dinstall

創建用戶:

[root@dm1 grub]# id dmdba
[root@dm1 grub]# useradd -g dinstall dmdba
[root@dm1 grub]# passwd dmdba

規劃安裝路徑:

mkdir /dm7
chown -R dmdba:dinstall /dm7 
ls -ld /dm7

配置環境變量

cd /home/dmdba
vi .bash_profile 
配置內容如下:
PATH=$PATH:$HOME/bin
export PATH
export DM_HOME=/dm7
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
[dmdba@localhost ~]$ source .bash_profile

配置完成後 執行 echo DM_HOME 若出現 /dm7 則成功,若沒有出現則 執行:
source .bash_profile

      設置文件最大打開數量

ulimit -n 65536
或者
vi /etc/security/limits.conf 
添加以下內容:
dmdba soft nofile 4096
dmdba hard nofile 65536

      掛載安裝包,需在root用戶下

mount -o loop /installdoc/dm7_setup_rh6_64_ent_7.6.0.142_20190312.iso /mnt

切換到dmdba賬號下,安裝數據庫

cd mnt
命令行安裝:
./DMInstall.bin -i

2.創建數據庫實例-圖形化

運行dbca.sh

創建數據庫實例--命令行

./dminit path=/dm7/data DB_NAME=DM02 instance_name=DMSERVER02 PORT_NUM=5237

su - root

cd /dm7/script/root/

./dm_service_installer.sh -t dmserver -i /dm7/data/DM02/dm.ini -p DMSERVER02

service DMSERVER02 start

netstat -ntl|grep 52

數據庫實例登錄

disql sysdba/dameng123@localhost:5236

數據庫實例狀態切換

select status$ from v$instance;
alter database mount;

重做日誌文件

SQL> select path from v$rlogfile;

SQL> alter database add logfile '/dm7/data/DAMENG/DAMENG04.log' size 128;

SQL> select path,rlog_size/1024/1024 from v$rlogfile;

SQL> alter database resize logfile '/dm7/data/DAMENG/DAMENG04.log' to 256;

數據庫文件

select path from v$datafile;

控制文件

select para_name,para_value from v$dm_ini where para_name='CTL_PATH';

修改參數(v$parameter)
   參數類型
   0 Sys/session 動態參數,同時修改內存和配置文件
   1 Read only 在數據庫運行狀態時,不能修改。
   2 In file 靜態參數,修改後,重啓服務生效

SQL> Select para_name,para_value from v$dm_ini where para_name='BUFFER_POOLS';
LINEID para_name para_value
---------- ------------ ----------
1 BUFFER_POOLS 3

3.2 命令
SP_PARA_SET_VALUE(SCOPE,PARA_NAME,PARA_VALUE);

SCOPE值:
1: 修改配置文件和內存
2:只修改配置文件

示例:
SQL> SP_SET_PARA_VALUE(2,’BUFFER’,1000);

表空間
   視圖
   dba_tablespaces
   v$tablespace
   v$huge_tablespace

創建一個表空間,初始大小50M,最大100M

SQL> create tablespace tbs2 datafile '/dm7/data/DAMENG/tbs2_01.dbf' size 50 autoextend on maxsize 100;

創建一個表空間,初始大小50M,表空間由2個數據文件組成,分別存儲在不同的磁盤上,每次擴展1m,每個數據文件最大100M

create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3_01.dbf' size 50 autoextend on next 1 maxsize 100,'/dm7/data/tbs3_02.dbf' size 50 autoextend on next 1 maxsize 100;

擴展表空間

alter tablespace tbs1 add datafile '/dm7/data/DAMENG/tbs1_02.dbf' size 32;

更換存儲位置

0:----online
1:------offline

SQL> alter tablespace tbs3 offline;

SQL> select tablespace_name,status from dba_tablespaces;

SQL> alter tablespace tbs3 rename datafile '/dm7/data/tbs3_02.dbf' to '/dm7/data/DAMENG/tbs3_02.dbf';

SQL> alter tablespace tbs3 online;

SQL> select file_name,status,tablespace_name from dba_data_files;
用戶管理

SQL> select username from dba_users;

案例1:建立用戶test,用戶可以創建自己的表,有屬於自己的表空間,用戶密碼要求每60天變更一次。

SQL> create tablespace test datafile '/dm7/data/DAMENG/test_01.dbf' size 32;

SQL>create user test identified by dameng123 limit password_life_time 60 default tablespace test;

SQL> select * from all_users;

SQL> conn test/dameng123

SQL>select grantee,granted_role from dba_role_privs where grantee='TEST';

SQL> select grantee,privilege from dba_sys_privs where grantee='PUBLIC';

SQL> grant create table to test;

案例2:規劃一個用戶test1,用戶每60天變更一次密碼,密碼嘗試連接2次失敗,賬號鎖定5分鐘,用戶能查詢sales.customer表。

create user test1 identified by dameng123 limit password_life_time 60,failed_login_attemps 2,password_lock_time 5;
//嘗試登錄2次後
SQL> select username,account_status,lock_date from dba_users;                     

SQL>alter user test1 account unlock;
SQL> select username,account_status,lock_date from dba_users;   

SQL> grant select on sales.customer to test1;   //賦權限
SQL> revoke select on sales.customer from test1;    //發現權限過大
SQL> grant select(person_id) on sales.customer to test1;  //賦權限
SQL> conn test1/dameng123
SQL> select user;
SQL> select person_id from bookshop.reader limit 10;

企業招聘一批錄入人員,權限固定,只能錄入city表。

SQL> conn sysdba/dameng123
SQL> create role r1;
SQL> grant insert on dmhr.city to r1;
SQL> create user test2 identified by dameng123;
SQL> grant r1 to test2;
SQL> conn test2/dameng123
SQL>  insert into dmhr.city values('sdf','dfdss',7);
 insert into dmhr.city values('sdf','dfdss',7);
[-5506]:沒有引用表[REGION]上的權限.
SQL> conn sysdba/dameng123
SQL> grant references any table to test2;
SQL> conn test2/dameng123
SQL> insert into dmhr.city values('aaa','bbbb',6);
SQL> commit;

用戶維護

收回權限:revoke
SQL> revoke select on dmhr.employee from test1;
賦權限:
SQL> grant references any table to test2;
修改用戶密碼
SQL> alter user test identified by 123456789;
鎖定用戶
SQL> alter user test account lock;
解鎖用戶
SQL> alter user test account unlock;
刪除用戶:
SQL> drop user test;
SQL> drop user test cascade;-------慎重,最好先備份
刪除角色:
SQL> drop role r1;
表的管理

遵循3範式。
案例1.規劃一張學員信息表。
表名:STU
學號:id char(10)
姓名:sname varchar(20) not null
性別:sex char(1)
年齡:age int
電話:tel varchar(15) not null
家庭住址:address varchar(50)
表空間 STU
約束:主鍵列—學號,非空—姓名和電話。
備註:student info
create table "TEST1"."STU"
(
    "ID" CHAR(10) ,
    "SNAME" VARCHAR(20) not null ,
    "SEX" CHAR(1) ,
    "AGE" INT,
    "TEL" VARCHAR(15) not null ,
    "ADDRESS" VARCHAR(50),
    primary key("ID")
)
storage(initial 1, next 1, minextents 1, fillfactor 0, on "STU")
;
comment on table "TEST1"."STU" is 'STUDENT INFO';
1、非空約束
SQL> create table test1.t1(id int);
SQL> alter table test1.t1 modify id int not null;
2、唯一約束
SQL> create table test1.t2(id int unique);
唯一約束遇到null,忽略,可錄入多個。
3、主鍵約束(一張表只能有一個主鍵約束)
SQL> create table test1.t3(id int primary key);
SQL> create table test1.t4(id int);
SQL> alter table test1.t4 add constraint t4_pri primary key(id);
4、檢查約束
SQL> create table test1.t5(id int check(id>=5));
外鍵約束
SQL> create table test1.t6(sid int primary key ,pid int);
SQL> create table test1.t7(id int primary key,sid int foreign key references test1.t6(sid));
7、對列加備註
SQL> comment on column test1.t6.sid is '編號';
導入數據到數據庫

 cat a.sql
insert into test1.t1 values(1);
insert into test1.t1 values(2);
insert into test1.t1 values(3);
insert into test1.t1 values(4);
insert into test1.t1 values(5);
insert into test1.t1 values(6);
insert into test1.t1 values(7);
commit;

SQL> start /home/dmdba/a.sql

SQL> select * from test1.t1;

維護表

1、重命名:
SQL> alter table test1.t1 rename to tt;
2、增加刪除列
SQL> alter table test1.tt add name varchar(10) default 'aaaa';
SQL> alter table test1.tt drop name;
3、啓用和禁用約束
SQL> select  table_name,constraint_name,constraint_type from dba_constraints where table_name='T5';
SQL> alter table test1.t5 enable constraint CONS134218779;
刪除表:
SQL> drop table  test1.tt;
如何去查看錶結構
語法:sp_tabledef(‘模式名’,’表名’);
SQL> sp_tabledef('TEST','T1');
語法:DBMS_METADATA.GET_DDL(‘類型’,‘表名’,‘模式名’)
SQL> select dbms_metadata.get_ddl('TABLE','STU','TEST1');
視圖管理

創建create view() as select() from () where();
SQL>create view test1.v1 as select * from dmhr.employee;
SQL>create view test1.v2 as select employee_name,hire_date,salary from dmhr.employee where hire_date >='2010-01-01';
相關數據字典:
Dba_views;
索引管理

查看索引:

SQL> select table_name,index_name from dba_indexes where table_name='STU';

創建表的索引

規劃索引表空間,表的數據無序的,索引的數據是有序

SQL> create tablespace index1 datafile '/dm7/data/DAMENG/index1_01.dbf' size 32; //創建索引表空間
SQL> create table test1.emp(id int);
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
SQL> create index ind_emp on test1.emp(id) tablespace index1;
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
SQL> explain select * from test1.emp where id<10;
SQL> begin  //沒有走我們自己建的索引,統計信息是舊的,需要重新收集
收集統計信息:
2   dbms_stats.gather_table_stats('TEST1','EMP');
3   end;
4   /
DMSQL 過程已成功完成
已用時間: 8.743(毫秒). 執行號:1969.
SQL> explain select * from test1.emp where id<10;

1   #NSET2: [0, 1, 12] 
2     #PRJT2: [0, 1, 12]; exp_num(2), is_atom(FALSE) 
3       #SSEK2: [0, 1, 12]; scan_type(ASC), IND_EMP(EMP), scan_range(null2,10)

重建索引:

SQL> alter index test1.ind_emp rebuild;
SQL> alter index test1.ind_emp rebuild online; //online的作用?
刪除索引:
SQL> drop index test1.ind_emp;

序列管理:

SQL> create sequence test1.s1
2   start with 1    -----序列的起始
3   increment by 1  ---自增多少
4   maxvalue  5  ----最大值
5   nocache  ---是否緩存
6   nocycle   ---是否循環
7   ;
SQL> create table test1.t10(id int primary key);
SQL> insert into test1.t10 values(test1.s1.nextval);
SQL> insert into test1.t10 values(test1.s1.nextval);
修改序列

SQL> alter sequence test1.s1 maxvalue 10; SQL> insert into test1.t10 values(test1.s1.nextval);

刪除序列

SQL> drop sequence test1.s1;

 

案例1:求各個部門的最高工資

SQL> select department_id,max(salary) from dmhr.employee group by department_id;
1
案例2:找出部門平均工資大於10000的所有部門

SQL> select department_id,avg(salary) av1 from dmhr.employee group by department_id having avg(salary)>10000;
1
注意:having 表示分組後的數據進行過濾,having不能單獨使用,一定是和group by 一起使用。聚合函數不能出現在where子句中。

排序 升序asc 降序desc 默認升序

SQL> select department_id,avg(salary) av1 from dmhr.employee group by department_id having avg(salary)>10000 order by av1 desc;

多表連接查詢:

內連接:結果集顯示全部滿足連接條件的記錄 inner join

SQL> select employee_name,department_name from dmhr.employee e join dmhr.department d on e.department_id=d.department_id limit 10;

外連接

   左外連接:把left join 左邊的全部顯示出來,右邊的只顯示滿足條件的,不滿足條件的用null 代替

SQL> update dmhr.employee set department_id=null where employee_id=1001;
SQL> select employee_name,department_name from dmhr.employee e left join dmhr.department d on e.department_id=d.department_id limit 10;
右外連接: 把寫在right join右邊的全部顯示出來,左邊的只顯示滿足條件的,不滿足條件的用null代替

SQL> insert into dmhr.department values('1106','aaaa','9002',9);
SQL> select employee_name,department_name from dmhr.employee e right join dmhr.department d on e.department_id=d.department_id;
全外連接:返回所有的記錄,包括不滿足條件

select employee_name,department_name from dmhr.employee full join dmhr.department d on e.department_id=d.department_id;

物理備份
1)工具簡介
冷備:(dmap服務打開的狀態下,數據庫是關閉的)
熱備:(dmap服務一定是打開的,數據庫也是打開的,數據庫要開歸檔)
導入導出:dexp dimp
集羣:數據守護(dw),dsc(rac)
達夢支持第三方的備份軟件:愛數,鼎甲

2)物理備份過程(冷備)
第一步:創建歸檔日誌存放路徑
#mkdir /dm7/data/dm01/arch

第二步:開歸檔
SQL> alter database mount;
SQL> alter database add archivelog 'type=local,dest=/dm7/data/dm01/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
SQL> alter database open;
SQL> select ARCH_MODE,STATUS$ from v$database;

第三步:停止數據庫服務
[dmdba@localhost dm01]$ service DmServicedm01 stop

第四步:使用dmrman備份
說明:dmrman 命令必須在命令所在的bin目錄下執行纔行
[dmdba@localhost bin]$ pwd
/dm7/bin
[dmdba@localhost bin]$ ./dmrman
RMAN> backup database '/dm7/data/dm01/dm.ini';
根據提示信息找到備份文件位置

使用命令行備份(熱備)
使用命令行備份,同樣需要開歸檔,但是不需要停數據庫服務
#mkdir /dm7/data/backup
SQL> backup database full backupset '/dm7/data/backup/full_bak';
增量備份
SQL> insert into user2.t1 values(user2.s1.nextval);
SQL> select checkpoint(1);
SQL> backup database increment backupset '/dm7/data/backup/incr_bak';

恢復表空間

SQL> restore tablespace tbs3 from backupset '/dm7/backup/full_bak2/';

SQL> alter tablespace tbs3 online;

邏輯備份
導入導出(dexp,dimp)
分爲四種級別:分別獨立,互斥不能同時存在
數據庫級別:導出或導入整個數據庫的訪問對象
用戶:導入或導出一個或多個用戶所擁有的所有對象
模式:導入或導出一個或多個模式下的所有的對象
表級:導出或導入一個或多個指定表或表分區

邏輯導出

[dmdba@dca01 tool]$ mkdir /dm7/backup/dexp
[dmdba@dca01 bin]$ ./dexp sysdba/dameng123@localhost:5236 file=dexp01.dmp log=dexp01.log directory=/dm7/backup/dexp full=y
邏輯導入

[dmdba@dca01 bin]$ ./dimp sysdba/SYSDBA@localhost:5239 file=/dm7/backup/dexp/dexp01.dmp log=/dm7/backup/dexp/dimp01.log

作業:

tool/manager

Sysjobs:作業信息
Sysjobschedules:作業的調度信息
Sysjobhistories:作業的歷史信息
SQL> select * from sysjob.sysjobs;

dm開發:

達夢支持那些語言做開發
C,c++, java,python ,php,perl
定義一個DM jdbc 的驅動串:
String jdbcstring=”dm.jdbc.driver.DmDriver”
DM URL連接串
String urlstring=”jdbc:dm://ip:5236”

10.1.配置ODBC
Linux環境中配置ODBC環境
檢查:[root@dca01 ~]# rpm -aq|grep gcc 有沒有gcc包,如果沒有,配置yum源去安裝。
解壓安裝包
tar -xzvf unixODBC-2.3.0.tar.gz

配置odbc

[root@dca01 unixODBC-2.3.0]# cd unixODBC-2.3.0

[root@dca01 unixODBC-2.3.0]# ./configure --enable-gui=no

編譯odbc

[root@dca01 unixODBC-2.3.0]# make

[root@dca01 unixODBC-2.3.0]# make install

查看odbc的版本

[root@dca01 unixODBC-2.3.0]# odbc_config --version

查看odbc配置文件路徑

[root@dca01 unixODBC-2.3.0]# odbc_config --odbcini

[root@dca01 unixODBC-2.3.0]# odbcinst -j

配置odbc.ini 和odbcinst.ini

[root@localhost ~]# cd /usr/local/etc/
[root@localhost etc]# cat odbc.ini 
[dm7]
Description = DM ODBC DSND
Driver = DM7 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = dameng123
TCP_PORT = 5236
[root@localhost etc]# 
[root@localhost etc]# cat odbcinst.ini 
[DM7 ODBC DRIVER]
Description = ODBC DRIVER FOR DM7
DRIVER = /dm7/bin/libdodbc.so
[root@localhost etc]# isql dm7
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章