轉載自王老師的課堂筆記,感謝老師的教導,連我這個小白也懂了一大半。
DCA
安裝
建立資料庫
管理資料庫執行個體
表空間
使用者
SQL(DDL,DML,DCL,TCL)
備份還原
作業
開發
2.安裝
A 收集軟硬體資訊
cat /etc/issue
[root@localhost ~]# uname -r
[root@localhost ~]# uname -m
[root@localhost ~]# fdisk -l
P+E(0,1)<=4
[root@localhost ~]# parted
mkfs
[root@localhost ~]# df
[root@localhost ~]# iostat 1 10
注意raid lvm
[root@localhost /]# mdadm
[root@localhost /]# cat /proc/cpuinfo
主頻,緩存,廠商(飛騰,龍芯,鲲鵬,海光,申威…)
[root@localhost /]# free
[root@localhost /]# top
B 規劃使用者
[root@localhost /]# groupadd dinstall
[root@localhost /]# useradd -g dinstall dmdba
[root@localhost /]# passwd dmdba
[root@localhost /]# id dmdba
cat /etc/default/useradd
[root@localhost /]# cat /etc/login.defs
C 規劃安裝路徑和資料庫的存儲路徑
[root@localhost /]# mkdir /dm7
D 注意權限
[root@localhost /]# ls -dl /dm7
[root@localhost /]# chown dmdba.dinstall -R /dm7
E 選擇安裝版本(iso .zip .tar.gz)
[root@localhost opt]# file dm7_setup_rh6_64_ent.iso
zip/unzip tar.gz/ tar
F 配置環境變量
臨時修改:
[root@localhost opt]# ulimit -n 65536
[root@localhost opt]# ulimit -a
[root@localhost security]# vim /etc/security/limits.conf
dmdba soft nofile 4096
dmdba hard nofile 65536
修改使用者的環境變量:
cd /home/dmdba ; vim .bash_profile
export DM_HOME=/dm7
export PATH=$DM_HOME/bin:$PATH:$HOME/bin
安裝:
[root@localhost opt]# mount -o loop dm7_setup_rh6_64_ent.iso /mnt
[root@localhost 桌面]# xhost +
[root@localhost opt]# su - dmdba
[dmdba@localhost mnt]$ ./DMInstall.bin
[root@localhost opt]# /dm7/script/root/root_installer.sh
bin 達夢常用的指令和庫檔案
doc 幫助手冊
jar jar包()
license_zh.txt 、license_en.txt 許可資訊
release_zh.txt release_en.txt 版本資訊
tool 用戶端工具
web DEM (利用web管理資料庫)
bin2 UTF-8
drivers 驅動(jdbc)
jdk JAVA軟體
log 日志
samples 例子
uninstall,uninstall.sh 解除安裝
desktop 桌面
include 頭函數
script 腳本
解除安裝:
[dmdba@localhost dm7]$ ./uninstall.sh
[root@localhost opt]# /dm7/root_uninstaller.sh
G 回退方案
指令行安裝:
[dmdba@localhost mnt]$ ./DMInstall.bin -i
3.建立資料庫執行個體
GUI:dbca.sh (資料庫配置助手)
CLI:dminit
[dmdba@localhost bin]$ ./dminit path=/dm7/data db_name=DM instance_name=TEST port_num=5237
[root@localhost root]# ./dm_service_installer.sh -t dmserver -p TEST -i /dm7/data/DM/dm.ini
4.管理資料庫執行個體
是否啟動:DM服務檢視器
[dmdba@localhost root]$ ps -ef|grep dmserver
[dmdba@localhost root]$ netstat -ntl|grep 523
啟動和關閉:
DM服務檢視器
dmserver (調試)
[dmdba@localhost bin]$ ./dmserver /dm7/data/DM/dm.ini
SYSTEM IS READY.
service systemctl
[dmdba@localhost bin]$ service DmServiceTEST start
[dmdba@localhost init.d]$ /etc/rc.d/init.d/DmServiceTEST stop
啟動的過程
A shutdown---mount
配置設定共享記憶體,啟動背景程序和線程。打開控制檔案。
B mount --- open
根據控制檔案,打開資料庫檔案和重做日志檔案
連接配接資料
A disql (預設連接配接5236)
[dmdba@localhost bin]$ ./disql sysdba/[email protected]:5236
[dmdba@localhost bin]$ ./disql [email protected]:5237
B DM管理工具
補充資料庫的狀态檢視和改變?
SQL> select status$ from v$instance;
open mount suspend
open ---mount
SQL> alter database mount;
mount --- open
SQL> alter database open;
4.表空間管理
資料庫的實體結構和邏輯結構
實體結構:檔案系統----資料檔案
邏輯結構:資料庫---表空間(一個或多個資料檔案)---段----簇---頁
資料庫的構成:
用戶端+伺服器 c/s
伺服器:資料庫(database,資料檔案)+執行個體(instance,共享記憶體+背景的程序或者線程)
SQL> desc v$database
資料檔案:SQL> select path from v$datafile;
重做日志檔案:SQL> select path from v$rlogfile;
控制檔案:SQL> select para_name,para_value from v$dm_ini where para_name='CTL_PATH';
SQL> desc v$instance
資料緩沖區:SQL> select para_name,para_value from v$dm_ini where para_name='BUFFER';
字典緩沖區:SQL> select para_name,para_value from v$dm_ini where para_name='DICT_BUF_SIZE';
SQL緩沖區:SQL> select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';
排序區:SQL> select para_name,para_value from v$dm_ini where para_name='SORT_BUF_SIZE';
哈希連接配接區:SQL> select para_name,para_value from v$dm_ini where para_name='HJ_BUF_SIZE';
線程:SQL> select name,thread_desc from v$threads;
對于參數的設定和調整:
SQL> sp_set_para_value(2,'BUFFER',500);
(範圍,參數名,參數值)
COMPATIBLE_MODE
是否相容其他資料庫模式。0:不相容,1:相容SQL92标準,2:相容ORACLE,3:相容MS SQL SERVER,4:相容MYSQL
A. 預設那些?作用?
SQL> select tablespace_name from dba_tablespaces;
行号 TABLESPACE_NAME
1 SYSTEM
2 ROLL
3 TEMP
4 MAIN
5 HMAIN
SYSTEM 系統表空間,存放的資料字典。
ROLL 復原表空間 ,復原段(MVCC)
TEMP 臨時表空間,臨時資料
MAIN 資料庫預設的表空間
HMAIN huge表空間(列存)
B. 如何建立?
案例一:規劃一個表空間,初始大小50M,最大1G。
SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1.dbf' size 50 autoextend on maxsize 1024;
注意:10m,最大1g?
表空間的資料檔案初始大小是page的4096倍。
案例二:建立一個表空間,初始大小32M,最大1g,每次擴充1m。
SQL> create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3.dbf' size 32 autoextend on next 1 maxsize 1024;
預設:SQL> select sf_get_extent_size;
案例三:規劃一個表空間,初始50M,最大值1G,要求表空間有2個資料檔案。
SQL> create tablespace tbs4 datafile '/dm7/data/disk1/tbs4_1.dbf' size 50 autoextend on maxsize 1024,'/dm7/data/disk2/tbs4_2.dbf' size 50 autoextend on maxsize 1024;
C. 如何維護?
大小不足?
增加資料檔案?
SQL> alter tablespace tbs5 add datafile '/dm7/data/DAMENG/tbs5_1.dbf' size 32 autoextend on maxsize 33;
更換存儲位置?
注意:表空間的狀态?
offline online
system,roll,temp不能offline
SQL> alter tablespace tbs5 offline;
SQL> select tablespace_name,status from dba_tablespaces;
SQL> alter tablespace tbs5 online;
SQL> select tablespace_name,file_name from dba_data_files;
SQL> alter tablespace tbs1 offline;
SQL> alter tablespace tbs1 rename datafile '/dm7/data/DAMENG/tbs1.dbf' to '/dm7/tbs1/tbs1.dbf';
SQL> alter tablespace tbs1 online;
删除表空間?
SQL> drop tablespace tbs5;
drop tablespace tbs5;
5.使用者管理
安全?
-
預設那些使用者,作用?
SQL> select username from dba_users;
行号 USERNAME
1 SYS
2 SYSDBA
3 SYSAUDITOR
4 SYSSSO
SYS 資料庫内置管理使用者,不能登入資料庫
SYSDBA 資料庫的管理者
SYSAUDITOR 審計員
SYSSSO 安全員(安全版)
SYSDBO 操作員(安全版)
SQL> select * from v$version;
-
規劃使用者?
a. 使用者名(字母開頭,$_#,128字元)
b. 預設存儲位置(表空間)
c. 密碼(長度,複雜度,密碼曆史,期限)
PWD_POLICY
設定系統預設密碼政策。0: 無政策;1: 禁止與使用者名相同;2: 密碼長度不小于6;4: 至少包含一個大寫字母(A-Z);8 :至少包含一個數字(0-9);16:至少包含一個标點符号(英文輸入法狀态下,除“和空格外的所有符号;若為其他數字,則表示配置值的和,如3=1+2,表示同時啟用第1項和第2項政策。當COMPATIBLE_MODE=1時,PWD_POLICY的實際值均為0
密碼曆史等資訊,通過limit選項配置的。
案例1:建立使用者user1,密碼嘗試登陸2次,鎖定2分鐘,密碼有效期為180天。寬限期5天,預設的表空間為tbs2.
create user "USER1" identified by "dameng123"
limit failed_login_attemps 2, password_life_time 180, password_lock_time 2, password_grace_time 5
default tablespace "TBS2";
SQL> desc sysusers
如何解鎖使用者和鎖定使用者。
SQL> alter user user1 account unlock;
SQL> alter user user1 account lock;
d. 權限(系統權限,對象權限)
SQL> select grantee,granted_role from dba_role_privs where grantee='USER1';
SQL> select grantee,privilege from dba_sys_privs where grantee='PUBLIC';
新建立的使用者預設配置設定public的角色。
系統權限:
SQL> grant create table to user1;
一般情況,把resource角色分給使用者,基本可以滿足使用者的基本需求。(系統權限)
SQL> grant resource to user1;
對象權限:
檢視DMHR.CITY
SQL> grant select on dmhr.city to user1;
SQL> grant select (employee_name) on dmhr.employee to user1;
撤銷權限:
SQL> revoke create table from user1;
SQL> revoke select on dmhr.city from user1;
e. 資源限制(CPU,記憶體的使用限制)
案例2:建立使用者user2,最大會話數是100,私有的記憶體200M。
create user "USER2" identified by "dameng123"
limit session_per_user 100, failed_login_attemps 3, password_lock_time 1,
password_grace_time 10, mem_space 200
grant "PUBLIC","RESOURCE" to "USER2";
SQL> create user abc identified by "dameng123" default tablespace tbs2;
-
維護使用者?
改密碼
SQL> alter user abc identified by 123456789;
修改資源限制
SQL> alter user abc limit password_life_time 180;
删除
-
角色管理?
一類權限的集合
SQL> create role r1;
SQL> grant select on dmhr.city to r1;
SQL> grant r1 to user2;
SQL> sp_set_role('R1',0);--禁用
SQL> sp_set_role('R1',1);--啟用
SQL> drop role r1;
6.SQL
DDL 資料定義語言
create drop truncate alter
表
資料庫的資料對象,存放到某個模式下。
建立一個使用者的時候,會生成一個與使用者同名的模式。
模式是一類資料對象的集合。(安全)
達夢支援哪些表?
預設表(索引組織表),堆表,外部表,分區表(範圍,清單,哈希)
如何規劃表?
表名稱
權限
功用(規劃列名和資料類型)
資料類型:int varchar char date clob blob
存儲位置
備注(注釋)
comment
範式(三範式)
限制
非空限制(不能錄入空值)
create table "SYSDBA"."T1"
(
"C1" INT not null
)
tablespace tbs3
;
comment on table "SYSDBA"."T1" is '測試表';
insert into t1 values (1);
檢視表的建立方法:
sp_tabledef('SYSDBA','T1');
錄入SQL腳本:
SQL> start /home/dmdba/a.sql
唯一限制 (錄入的值唯一)
create table "SYSDBA"."T2"
"C1" DEC(4, 2)
alter table "SYSDBA"."T2" add constraint "T2_UNI" unique("C1");
select table_name,constraint_name,constraint_type from dba_constraints where table_name in ('T2','T3');
注意null
主鍵限制(唯一非空,一張表隻能有一個主鍵)
create table "SYSDBA"."T4"
"C1" CHAR(10) primary key
tablespace "TBS3"
注意:設計主鍵的時候,盡量放到無任何業務邏輯的列上。
檢查限制:
create table "SYSDBA"."T5"
"C1" INTEGER check (c1>=6)
) tablespace tbs3;
create table t6 (name varchar(20) check(name<>'老四')) tablespace tbs3;
外鍵限制
create table t9 (id int primary key,pid int);
create table t10 (sid int primary key,id int foreign key references t9(id));
維護表?
增加列,删除列
SQL> alter table t1 add name varchar(10);
SQL> alter table t1 drop name;
重命名:
SQL> alter table test rename to t11;
删除表:
SQL> drop table t11;
視圖(簡單視圖)
視圖了解一張表的透析。(視圖本身不存儲資料,視圖查到的資料在表上)
建立
SQL> create view v1 as select * from dmhr.city;
SQL> select view_name,text from dba_views where view_name='V1';
修改
SQL> create or replace view v1 as select city_id,city_name from dmhr.city;
SQL> drop view v1;
索引
了解成是一本書的目錄。加快查詢,對表做增删改操作,資料庫會自動維護索引。
索引是一棵倒樹,使用索引是多索引結構做周遊。
建立索引的基本規則:
- 經常查詢的列
- 謂詞後經常出現的列上
- 連接配接條件的列上
- NULL不是适合建立索引
-
列上的資料非常局限
建立索引
SQL> create table emp as select from dmhr.employee;
SQL> select index_name from dba_indexes where table_name='EMP';
二級索引
SQL> create index ind_emp on emp (employee_id) tablespace main;
SQL> explain select from emp where employee_id<100;
使用索引
注意:表或者資料庫的統計資訊是不是最新的。
更新統計資訊:
dbms_stats
begin dbms_stats.gather_table_stats('SYSDBA','EMP');
end;
/
維護索引
重建
SQL> alter index ind_emp rebuild;
SQL> alter index ind_emp rebuild online;
SQL> drop index ind_emp;
注意:一般在業務低谷去執行。
目的:防止誤操作,防止軟硬體故障,自然災害
方法:第三方工具,資料庫的備份指令,叢集
方式:實體備份,邏輯備份
實體備份:
脫機備份
資料庫關閉
[dmdba@localhost ~]$ /etc/rc.d/init.d/DmServiceDMSERVER stop
Dmap服務是打開
[dmdba@localhost ~]$ /etc/rc.d/init.d/DmAPService start
利用控制台做備份和還原
注意:先做還原,在做恢複。
聯機備份
資料庫是打開
[dmdba@localhost 20200109]$ /etc/rc.d/init.d/DmServiceDMSERVER status
[dmdba@localhost 20200109]$ /etc/rc.d/init.d/DmAPService status
資料是歸檔模式
SQL> select arch_mode from v$database;
打開資料庫歸檔:
資料庫到配置模式:SQL> alter database mount;
配置歸檔檔案:
SQL> alter database add archivelog 'dest=/dm7/arch,type=local,file_size=64,space_limit=0';
打開歸檔配置:
SQL> alter database archivelog;
打開資料庫:
備份和還原
備份資料庫,表空間,表,歸檔
備份資料庫:
SQL> backup database backupset '/dm7/backup/20200109';
表空間:(system,roll不能單獨備份)
SQL> backup tablespace dmhr backupset '/dm7/backup/dmhr_full';
備份表:
SQL> backup table dmhr.city backupset '/dm7/backup/city_bak';
備份歸檔:
SQL> backup archivelog backupset '/dm7/backup/arch_bak';
案例1:假設dmhr的表空間損壞?
SQL> alter tablespace dmhr offline;
SQL> restore tablespace dmhr from backupset '/dm7/backup/dmhr_full/';
SQL> alter tablespace dmhr online;
案例2:假設整個資料庫損壞?
利用達夢控制台工具
邏輯備份:(打開)
dexp dimp
備份整個資料庫,備份使用者,備份模式,備份表
[dmdba@localhost 20200109]$ dexp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=emp
[dmdba@localhost 20200109]$ dimp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=emp
定期制定某項任務
- 定期做備份
- 定期執行腳本
- 定期收集統計資訊
-
做遷移等
配置作業的步驟:
- 初始代理環境(生成一個sysjob的模式)
- 打開作業
- 配置步驟
- 配置排程
-
送出作業
案例1:每周三晚上23:00對資料庫做完全備份。
call SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('full_bak');
call SP_ADD_JOB_STEP('full_bak', 'f1', 6, '01000000/dm7/backup/bak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('full_bak', 'f2', 1, 2, 1, 8, 0, '23:00:00', NULL, '2020-01-09 11:03:08', NULL, '');
call SP_JOB_CONFIG_COMMIT('full_bak');
select from "SYSJOB"."SYSJOBS";
select from "SYSJOB"."SYSJOBSTEPS";
select from "SYSJOB"."SYSJOBSCHEDULES";
select from "SYSJOB"."SYSJOBHISTORIES";
案例2:周一,周二,周四到周日做增量備份(23:00)
call SP_CREATE_JOB('inc_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('inc_bak');
call SP_ADD_JOB_STEP('inc_bak', 'i1', 6, '11000000/dm7/backup|/dm7/backup', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('inc_bak', 'i2', 1, 2, 1, 119, 0, '23:00:00', NULL, '2020-01-09 11:10:14', NULL, '');
call SP_JOB_CONFIG_COMMIT('inc_bak');
達夢支援的語言:C C++ JAVA PHP…