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