人性化易操作國產資料庫達夢資料庫學習淺談
有幸參與了達夢資料庫的DCA學習。
經過學習,一是對當前國產資料庫有了概況瞭解,當前大環境下國產資料庫可謂是百花齊放、百家爭鳴。大體上可分為:完全自主開發、基於開原始碼開發、基於授權下開發以及混合型(開源+授權)下開發,而完全自主開發且有所成就的僅有達夢一家,因此也對達夢有了特殊的感情,希望他越來越好。
二是對達夢資料庫有了進一步的認識,作為DCA方面主要有以下幾點的學習(銀河麒麟V10+DM8):
1、資料庫的安裝;
2、建立資料庫及資料庫例項管理;
3、DM的客戶端工具;
4、DMsql;
5、DM的體系結構;
6、表空間管理;
7、使用者管理;
8、模式物件管理;
9、資料字典和動態效能檢視;
10、資料庫的備份還原;
11、作業管理;
12、DM8開發。
以下就從每個部分涉及到主要操作---記錄
第一部分
(一) 收集安裝環境
1、 檢視系統資訊
[root@馬吃水搬磚工人]# cat /proc/version
2、 檢視 CPU
[root@馬吃水搬磚工人]# lscpu
3、 檢視記憶體
[root@馬吃水搬磚工人]# free -m
4、 檢視磁碟
[root@馬吃水搬磚工人]# df -h
[root@馬吃水搬磚工人]# df -h /tmp ---(特別注意該目錄空間保持1G以上)
5、 Glibc、gcc 版本
[root@馬吃水搬磚工人]# rpm -qa|grep glibc
[root@馬吃水搬磚工人]# rpm -qa|grep gcc
第二部分 安裝 DM8
1、規劃安裝使用者和使用者組:
[root@馬吃水搬磚工人]# groupadd dinstall
[root@馬吃水搬磚工人]# useradd -g dinstall dmdba
[root@馬吃水搬磚工人]# passwd dmdba
2、規劃安裝目錄:
[root@馬吃水搬磚工人]# mkdir /dm8
[root@馬吃水搬磚工人]# chown dmdba:dinstall /dm8
3、掛載安裝:
[root@馬吃水搬磚工人]# mkdir /mnt/dm
[root@馬吃水搬磚工人]# mount /opt/dm8_xxxxxxx.iso /mnt/dm
[root@馬吃水搬磚工人]# su - dmdba
4、設定圖形化介面:
(1)第一次進入虛擬機器,執行下 xhost +
root@馬吃水搬磚工人]# xhost +
(2)切換 dmdba 使用者
[root@馬吃水搬磚工人]# su - dmdba
[dmdba@馬吃水搬磚工人 ~]$ export DISPLAY=:0.0
[dmdba@馬吃水搬磚工人 ~]$ cd /mnt/dm
5、圖形化介面方式安裝 DM 資料庫
[dmdba@馬吃水搬磚工人 dm]$ ./DMInstall.bin ---(基本為點點點操作)
[root@馬吃水搬磚工人 ~]# systemctl start/stop DmServiceDMTESTSVR.service --ROOT使用者的啟動命令
[dmdba@馬吃水搬磚工人 bin]$ ./disql sysdba/密碼:埠號
第三部分
刪除資料庫服務:
2、 root 執行註冊服務指令碼
[root@馬吃水搬磚工人 root]# ./dm_service_installer.sh -t dmserver -p DMTESTSVR -dm_ini /dm8/data/DMTEST/dm.ini
建立服務(DmServiceDMTESTSVR)完成
3、 root 執行刪除服務指令碼
[root@馬吃水搬磚工人 root]# ./dm_service_uninstaller.sh -h
[root@馬吃水搬磚工人 root]# ./dm_service_uninstaller.sh -n DmServiceDMTESTSVR
連線資料庫
1、使用 DM 管理工具圖形化介面連線資料庫
2、使用 disql 命令列方式連線資料庫
[dmdba@馬吃水搬磚工人 ~]$ cd /dm8/bin
[dmdba@馬吃水搬磚工人 bin]$ ./disql sysdba/密碼:埠號
啟動和關閉 DM 資料庫
DM 資料庫的狀態:
Shutdown:關閉狀態
Mount:配置狀態:可以修改資料庫歸檔配置、主備等模式,不能進行資料檔案的讀寫。
Open:開啟狀態:資料庫正常狀態,可以讀寫資料檔案。正常訪問表,讀取資料。
Suspend:只讀狀態,只能讀,不能寫(DML 操作一旦 commit,即會被掛起)。
MOUNT 和 OPEN 可以相互轉換(與 Oracle 不同)。SUSPEND 和 OPEN 也可以相互轉換。
但 MOUNT 和 SUSPEND 不能相互轉換。
第四部分:DM 的客戶端工具
DM 管理工具(圖形化管理資料庫,聯機工具,包含使用者管理、角色許可權管理、表空間、模
式、模式下物件(表、索引、約束、函式、過程、檢視等)、資料庫物理聯機備份、作業管理
等功能)
[dmdba@馬吃水搬磚工人 tool]$ ./manager
DM 控制檯工具(console 離線工具)
提供離線備份還原、修改資料庫引數(修改後重啟資料庫才能生效)等功能。
[dmdba@馬吃水搬磚工人 tool]$ ./console
DTS 資料遷移工具(支援其他資料庫遷移到達夢,或者達夢遷移到檔案等)
[dmdba@馬吃水搬磚工人 tool]$ ./dts
DM 效能監視工具:
[dmdba@馬吃水搬磚工人 tool]$ ./monitor
第五部分:DMSQL --基本和其他資料庫類似不過多介紹
第六部分:DM 的體系結構
體系結構概覽
DM8 資料庫是由資料庫和例項構成
資料庫:DM 資料庫指的是磁碟上存放在 DM 資料庫中的資料的集合
例項:例項一般是由一組正在執行的 DM 後臺程式/執行緒以及一個大型的共享記憶體組成
DM 儲存結構
表空間是 DM 資料庫的最大儲存單元,所有資料都儲存在表空間中。表空間採用段(segment)、簇(extent)和頁(page)的方式管理。一個表空間可以包含一個或多個資料檔案。一個資料檔案僅能歸屬於一個表空間。
DM 物理檔案包含:配置檔案、控制檔案、資料檔案、聯機日誌(此四個檔案必不可少,缺少一個將無法正常啟動)。配置檔案包括(服務配置 dm.ini,守護配置,複製配置,審計配置)控制檔案,資料檔案,重做日誌檔案,備份檔案,歸檔日誌檔案,跟蹤日誌檔案等
dm.ini 配置引數檔案
引數的型別:
READ ONLY:只讀引數,只能通過修改 dm.ini 文字檔案修改此引數(需要重啟資料庫才能生
效)。
SYS:動態(系統級)引數。可以在資料庫執行時修改。
SESSION:動態(會話級)引數,可以在資料庫執行時修改,且可以只針對當前會話生效。
IN FILE:靜態引數,可以在資料庫執行時修改,可需要重啟資料庫才能生效。
SQL> select distinct para_type from v$dm_ini;
資料庫引數的修改方法:
(1) console 控制檯工具 圖形化介面方式修改,需要重啟資料庫才能生效。
(2) 直接修改 dm.ini 配置檔案,需要重啟資料庫才能生效。
(3) 系統函式修改(可以用來修改靜態和動態引數,但靜態引數修改後需要重啟資料庫才能生效)。
(4) 使用 alter system set 語句修改(可以用來修改靜態和動態引數,但靜態引數修改後需要重啟資料庫才能生效)。
DM 記憶體結構
資料緩衝區
用於快取資料檔案中的資料頁。BUFFER 是從磁碟讀出的資料頁在記憶體中的映象,由 INI配置中的 BUFFER、FAST_POOL_PAGES、RECYCLE、KEEP 等確定大小,不同型別的緩衝區主要表現為淘汰機制資料緩衝區的大小影響資料庫的讀寫效能,OLTP,資料緩衝區佔記憶體 40-60%,OLAP,資料緩衝區佔記憶體 60-80%;
邏輯讀:從記憶體中讀取;物理讀:從磁碟中讀取。
select * from v$bufferpool; --資料緩衝區
select name, type, value, sys_value, file_value from v$parameter t where
name in ('BUFFER','KEEP','FAST_POOL_PAGES','RECYCLE');
修改資料庫緩衝區 BUFFER 引數為 500:
alter system set 'BUFFER'=500 spfile;
重做日誌緩衝區
重做日誌是資料庫與磁碟間的一層快取,將隨機的磁碟寫轉換成順序寫,日誌緩衝區是資料庫和日誌間的快取對應 INI 引數 RLOG_BUF_SIZE
SQL 緩衝區
快取 sql 語句、對應的執行計劃、快取結果集(需要開啟結果集快取,預設不開啟)
SQL CACHE POOL,簡稱 SCP,對應 INI 引數 CACHE_POOL_SIZE,是用來儲存包資訊(PACKAGE)、執行計劃、結果集快取的一片專用快取區域,對於 SQL 類別比較多,或者 PKG比較多、複雜的系統,建議將該引數調大。引數為 USE_PLN_POOL,是否啟動計劃重用;為 0 時禁止計劃重用,1 表示啟動,預設為 1。RS_CAN_CACHE,是否啟動結果集快取,預設為 0,不啟用。對應引數 CACHE_POOL_SIZE,如果 sql 較多、結果集快取,可以適當調大 sql 緩衝區。
相關資料字典:
select * from v$cacheitem;
select * from v$cachesql;
select * from v$cachepln;
select * from v$cachers;
字典緩衝區:
字典緩衝區是存在資料庫物件的一片緩衝區,對應 INI 引數 DICT_BUF_SIZE,DM8 裡面資料物件其實對應的是系統表上的一些資訊,記憶體中的資料物件是通過將系統表上的資訊取出並解析出來得到的,該緩衝區一是避免了頻繁向磁碟請求獲取系統表資訊,二是可以減少
系統表資訊解析開銷
select * from v$dynamic_tables t where T.NAME like '%DICT%';
select * from V$DICT_CACHE_ITEM;
select * from V$DICT_CACHE;
select name, type, value, sys_value, file_value from v$parameter t where
name like 'DICT_BUF_SIZE';
主記憶體池(共享記憶體池)
當其他記憶體池(不包含資料緩衝區)不夠時,會像主記憶體池申請空間。伺服器啟動時從作業系統申請的一大片記憶體,後續伺服器執行過程中,一般情況下,很多需要記憶體分配的地方都是從該池分配,如果需要的記憶體大於配置值(MEMORY_POOL),共享記憶體池也可進行自動擴充套件,INI 引數 MEMORY_EXTENT_SIZE 指定了共享記憶體池每次擴充套件的大小,引數 MEMORY_TARGET 則指定了共享記憶體池能擴充套件到的最大大小.
select * from V$mem_pool;
MEMORY_POOL:初始大小
MEMORY_EXTENT_SIZE:擴充套件大小
MEMORY_TARGET:目標大小
MEMORY_N_POOL:共享記憶體池個數,預設為 1,高併發時可設定多個。
執行時的記憶體池
特點:使用時申請,用完即釋放。包含:虛擬記憶體池、會話池、排序區、HASH 區等。
排序區:SORT_BUF_SIZE
少量的資料排序,優先在記憶體中排序,此時佔用排序區;
大量的資料排序,記憶體中放不下,佔用臨時表空間排序。
如果業務經常有排序,可以適當調大排序區,提高效率。
HASH 區:HJ_BUF_SIZE
HASH 連線、HASH 分割槽佔用雜湊區。如果業務 hash 連線較多,可以調大雜湊區。
DM 執行緒
DM 是單程式多執行緒對稱伺服器架構。
檢視資料庫程式:
[dmdba@馬吃水搬磚工人 DM]$ ps -ef|grep dmserver
檢視資料庫對應的執行緒:
[dmdba@馬吃水搬磚工人 DM]$ ps -T -p 1750
動態檢視:
select * from V$process; --程式
select * from v$threads; --執行緒
監聽執行緒
用於在伺服器埠上進行迴圈監聽,有來自客戶的連線請求,監聽執行緒被喚醒並生成一個會話申請任務,加入工作執行緒的任務佇列,等待工作執行緒進行處理
工作執行緒
DM 的核心執行緒;預設 16 個工作執行緒,業務可根據實際情況修改。
IO 執行緒
用於讀寫資料
需要處理的資料塊不在緩衝區中,此時需要將相關資料塊讀入緩衝區 -物理讀
緩衝區滿或系統關閉時,此時需要將部分髒資料塊寫入磁碟 -寫髒塊
檢查點到來時,需要將所有髒資料塊寫入磁碟
日誌重新整理執行緒
日誌的刷盤。主要用於事務提交或檢查點時將日誌緩衝區中的 REDO 日誌寫入到日誌檔案中。
日誌歸檔執行緒
完成 redo 日誌的歸檔。
日誌重做執行緒
主要用於系統故障恢復,日誌重做執行緒根據 REDO 日誌進行並行的故障恢復排程執行緒 檢查系統級的時間觸發器;清理 SQL 快取、計劃快取中失效的項,或者超出快取限制後淘汰不常用的快取項;動態緩衝區檢查。根據需要動態擴充套件或動態收縮系統緩衝池;自動執行檢查點;會話超時檢測;必要時執行資料更新頁刷盤;喚醒等待的工作執行緒;
一個 sql 的執行過程:
客戶端發起 sql 請求,到達服務端監聽執行緒,生成會話執行緒、工作執行緒
語法語義許可權解析(字典緩衝區)
查詢 sql 語句、sql 執行計劃(sql 緩衝區中查詢 sql 語句,執行計劃,如果找到—軟解析,根據執行計劃查詢語句,生成對應的結果集。如果沒有找到對應 sql 語句,則將此 sql語句加入 sql 緩衝區,並生成對應的執行計劃 –-硬解析)
Sql 讀,如果資料緩衝區中有對應的資料頁,此時為邏輯讀,如果資料緩衝區沒有對應資料頁,則 IO 執行緒從磁碟中(資料檔案)讀取資料放入資料緩衝區,此時為物理讀(更消耗效能)。如果語句涉及多表 HASH 連線,則會佔用 HASH 區,如果 sql 涉及排序,則少排序
佔用排序區。
Sql 寫,資料緩衝區,產生的 redo 放入日誌緩衝區,如果執行 commit,日誌重新整理執行緒將寫入日誌緩衝區中資料寫入聯機日誌。後期資料庫執行檢查點,或資料緩衝區將滿,則 IO執行緒將資料緩衝區中的資料寫入資料檔案。
第七部分:表空間管理
管理表空間
DM 預設預定義 SYSTEM、ROLL、MAIN、TEMP、HMAIN 五個表空間。
SYSTEM:系統表空間,存放資料字典等資訊(表、欄位、檢視等物件的定義、許可權資訊等)
ROLL:回滾表空間,存放回滾頁,資料庫中的 DML 操作對應都會生成 redo 和 undo,undo 資訊放入 ROLL 表空間。
alter system set 'UNDO_RETENTION'= 300 both;
select * from v$parameter t where name like 'UNDO_RETENTION';
MAIN:使用者預設表空間,當建立使用者時,如果為指定使用者的預設表空間,則 MAIN 為使用者的預設表空間。
TEMP:臨時表空間,存放臨時表資料等、當大量的資料排序或建立索引佔用臨時表空間。DM 中臨時表空間由引數 TEMP_SIZE 指定。
select * from v$parameter t where name like 'TEMP%';
TEMP_SIZE:臨時表空間初始大小
TEM_PATH: 臨時表空間路徑
TEMP_SPACE_LIMIT:臨時表空間的空間限制,0 表示不限制。
修改臨時表空間的初始大小:
alter system set 'TEMP_SIZE'=100 spfile;
收縮 TEMP 表空間的方法:
1、 重啟資料庫,TEMP 表空間資料檔案會重建。
2、 線上收縮臨時表空間 SP_TRUNC_TS_FILE。
HMAIN:HUGE 表的預設表空間(HTS 表空間)。
DM 資料檔案大小,最大值不能低於頁大小的 4096 倍(如果頁大小是 8K,最小值將不低於 32M),最大值為頁大小的 2 的 31 次方-1(如果頁大小是 8K,最大值為 16T-1)。
資料庫安裝使用者 dmdba 有對該目錄操作的許可權。
alter TABLESPACE tbs RENAME DATAFILE 'TBS01.DBF' TO '/dm8/data/DM/TBS/TBS01.DBF';
相關資料字典:
select * from dba_tablespaces;
select * from DBA_DATA_FILES;
select * from v$tablespace;
select * from v$datafile;
select * from DBA_FREE_SPACE; --資料檔案剩餘空間
建立表空間:
create tablespace tbs DATAFILE 'TBS01.DBF' size 32; SYSTEM、ROLL、TEMP 表空間不能離線,系統預定義的表空間都不能刪除。
表空間離線後,該表空間中的資料將不能讀寫。
舉例:
create table t_test(id int, name VARCHAR(20)) TABLESPACE tbs;
insert into t_test(id, name) values(1, 'aaa');
commit;
alter tablespace tbs offline;
select * from t_test;
表空間[TBS]處於離線狀態
表空間重新命名:
alter tablespace tbs RENAME TO dmtbs;
刪除表空間(只能刪除空的表空間):
drop tablespace dmtbs;
create tablespace "TBSTEST" datafile '/dm8/data/DM/TBS/TBSTEST01.DBF' size 64
autoextend on next 2 maxsize 10240, '/dm8/data/DM/TBS/TBSTEST02.DBF' size 64 autoextend
on next 2 maxsize 10240 CACHE = NORMAL;
管理資料檔案
修改表空間:
alter TABLESPACE tbs add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2
MAXSIZE 20480;
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND on NEXT 2 MAXSIZE
20480;
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND off;
alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' TO 128;
遷移表空間資料檔案:
alter tablespace tbs offline;
alter TABLESPACE tbs RENAME DATAFILE 'TBS01.DBF' TO
'/dm8/data/DM/TBS/TBS01.DBF';
alter TABLESPACE tbs RENAME DATAFILE 'TBS02.DBF' TO
'/dm8/data/DM/TBS/TBS02.DBF';
alter tablespace tbs online;
管理重做日誌檔案
聯機重做日誌:存放 redo 資訊,迴圈使用,不斷覆蓋。DM 資料庫聯機日誌自動切換,不能手工切換。
資料字典:
select * from v$rlogfile;
select * from v$rlog; --cur_file表示正在使用的聯機日誌
修改聯機日誌檔案大小
alter database RESIZE LOGFILE '/dm8/data/DM/DM01.log' TO 300;
alter database RESIZE LOGFILE '/dm8/data/DM/DM02.log' TO 300;
新增聯機日誌檔案
alter DATABASE ADD LOGFILE '/dm8/data/DM/DM03.log' SIZE 300;
修改聯機日誌檔案路徑(遷移聯機日誌檔案)
alter database mount;
alter database RENAME LOGFILE 'DM01.log' TO '/dm8/data/DM/REDO/DM01.log';
alter database RENAME LOGFILE 'DM02.log' TO '/dm8/data/DM/REDO/DM02.log';
alter database RENAME LOGFILE 'DM03.log' TO '/dm8/data/DM/REDO/DM03.log';
alter database open;
DM 管理工具圖形化介面管理聯機日誌:
歸檔管理
預設情況,DM 不開啟歸檔。
歸檔是對 REDO 的歸檔。歸檔的目的是使資料庫故障時可以恢復到故障的前一刻(完全恢復),或者恢復到指定的時間點或指定 LSN(不完全恢復)。
開啟歸檔的方法:
1、sql 命令開啟歸檔
SQL> alter database mount;
SQL> alter database archivelog;
SQL> select arch_mode from v$database;
行號 ARCH_MODE
---------- ---------
1 N
已用時間: 0.654(毫秒). 執行號:714.
SQL> select * from v$dm_arch_ini;
未選定行
2、圖形化介面開啟歸檔
(1)設定資料庫為 MOUNT 配置狀態
(2)開啟歸檔、配置歸檔
(3)資料庫修改為 OPEN 狀態
3、修改 dm.ini 和 dmarch.ini 配置檔案
資料庫自動完成歸檔的切換,DM 支援手工切換歸檔;
alter SYSTEM ARCHIVE LOG CURRENT;
alter SYSTEM SWITCH LOGFILE;
alter DATABASE ARCHIVELOG CURRENT;
歸檔檔案的刪除:
select * from v$ifun t where name like 'SF_ARCHIVELOG_%';
SF_ARCHIVELOG_DELETE_BEFORE_LSN
SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate -7);
針對業務繁忙期間,出現磁碟 IO 不定時繁忙的情況。因為配置了歸檔的空間上限(歸檔達到此上限),生成新的歸檔日誌前刪除舊的歸檔日誌檔案。
配置 JOB 作業,在業務空間期定時清理 N 天之前的歸檔檔案。
第八部分:使用者管理
DM 預設的預定義使用者:
SYS:系統內建使用者,不允許登入。
SYSDBA:系統管理員,擁有幾乎所有許可權(除審計和強制訪問控制)
SYSAUDITOR:系統審計員,具有審計相關許可權。
SYSSSO:系統安全員,具有強制訪問控制等許可權;
SYSDBO:安全版本才有的使用者,安全操作員。
PWD_POLICY 引數指定系統的口令策略,預設為 2;
系統支援的口令策略有:
0 無策略
1 禁止與使用者名稱相同
2 口令長度不小於 9 4 至少包含一個大寫字母(A-Z) 8 至少包含一個數字(0-9) 16 至少包含一個標點符號(英文輸入法狀態下,除“和空格外的所有符號)
口令策略可單獨應用,也可組合應用。組合應用時,如需要應用策略 2 和 4,則設定口令策略為 2+4=6 即可。
select * from v$parameter t where t.name = 'PWD_POLICY';
create user hr IDENTIFIED by 密碼;
alter SYSTEM set 'PWD_POLICY' = 15 BOTH;
create user hrtest IDENTIFIED by 密碼;
使用者輸入錯誤多次(預設 3 次),將會被鎖定。
select * from dba_users;
select b.USERNAME,a.* from sysusers a, dba_users b where a.id = b.USER_ID;
建立使用者
create user hrtest IDENTIFIED by 密碼 DEFAULT TABLESPACE TBSTEST;
使用者鎖定和解鎖:
alter user hr ACCOUNT UNLOCK;
alter user hr ACCOUNT LOCK;
修改使用者的預設表空間:
alter user hr DEFAULT TABLESPACE dmtbs;
使用者資源限制設定(DM 新版本已經支援使用 profile 來管理使用者的資源限制):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
密碼帶有特殊字元的登入處理:
alter user hrtest IDENTIFIED by "Dameng@123";
[dmdba@馬吃水搬磚工人 ~]$ disql hrtest/'"Dameng@123"'
伺服器[LOCALHOST:埠號]:處於普通開啟狀態
登入使用時間 : 1.589(ms)
disql V8
SQL> conn hrtest/"Dameng@123"
刪除使用者:
drop user if EXISTS hr;
drop user if EXISTS hr CASCADE; --生成環境慎用
DM 管理工具建立使用者:
相關資料字典:
select * from dba_sys_privs t where t.GRANTEE= 'HRTEST';
select * from dba_role_privs t where t.GRANTEE= 'HRTEST';
select * from dba_tab_privs t where t.GRANTEE= 'HRTEST';
DM 默 認 不 能 授 予 用 戶 在 其 他 模 式 下 數 據 定 義 ( DDL ) 的 權 限 , 由 參 數
ENABLE_DDL_ANY_PRIV 指定,預設為 0。
grant select any table to hrtest;
select * from v$parameter t where name like '%ENABLE_DDL_ANY_PRIV%';
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both; --開啟後可正常賦予許可權
grant create any table to hrtest;
grant create any index to hrtest; 角色管理
角色是許可權的集合,角色使許可權管理更加方便。
DBA:具有幾乎所有許可權(除審計和強制訪問控制之外),預設賦給 SYSDBA 使用者。
PUBLIC:具有對當前模式下物件的 DML 資料操作許可權。
RESOURCE:具有在當前模式下資料定義許可權(建立表、索引、檢視等),
SOI:具有查詢 sys 開頭系統表的許可權
VTI:具有查詢 v$開頭的動態檢視許可權
select * from dba_roles;
create role r1;
grant create table to r1;
grant select on dmhr.department to r1;
grant r1 to hrtest;
sp_set_role('R1',0) --角色禁用和啟用,禁用后角色許可權將不在生效。
DM 管理工具建立角色:
賦予物件許可權增加 with grant option 說明許可權可以轉授,回收時要增加 cascade 關鍵字級聯回收許可權。
revoke select on dmhr.employee from r2 CASCADE; 第九部分:模式物件管理
管理模式
模式與使用者之間的關係:
當系統建立一個使用者時,會自動生成一個對應的模式,使用者還可以建立其他模式,使用者和模式是一對多的管理,一個使用者可以擁有多個模式,一個模式僅能歸屬於一個使用者。
select * from SYSOBJECTS t where t."TYPE$" ='SCH'; --檢視模式
select * from SYSOBJECTS t where t."SUBTYPE$" ='USER'; --檢視使用者
--檢視模式和使用者的關係
select a.id, a.name, b.id, b.name
from SYSOBJECTS a, SYSOBJECTS b
where a.pid = b.id and a."TYPE$" = 'SCH';
建立模式
create schema hrtest01 AUTHORIZATION HRTEST;
create table hrtest01.t_test(id int, name varchar(20));
--檢視當前模式和當前使用者
select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER');
--切換模式
set SCHEMA dmhr;
---------- ---------------------------------------
1 DMHR
--刪除模式
drop SCHEMA IF EXISTS HRTEST01;
drop SCHEMA IF EXISTS HRTEST01 CASCADE; --級聯刪除模式下物件,生產環境慎
用。
管理表
DM 預設建立的是索引組織表,Oracle 預設建立的是堆表:
索引組織表和堆表的區別:
索引組織表有且僅有一個聚簇索引鍵,表資料按照聚簇索引鍵排序(資料是有序的,插入有序),rowid 是邏輯 rowid,佔用儲存空間,所以索引組織表比堆表佔用較多空間。
堆表,插入無序,資料無序,rowid 是物理 rowid,不佔用儲存空間,所以堆表更節約空間,支援併發。如果是對聚簇索引鍵的範圍查詢,索引組織表更高效。
DM 預設建立的索引組織表,由引數 LIST_TABLE 指定。
select * from v$parameter t where name ='LIST_TABLE';
DM 建立表時如果指定了主鍵,則主鍵為聚簇索引鍵;如果建立表示未指定主鍵,則 rowid
為聚簇索引鍵(由引數 PK_WITH_CLUSTER 指定);
相關資料字典:
select * from dba_constraints t where t.owner='HRTEST';
select * from DBA_CONS_COLUMNS t where t.owner='HRTEST';
DM 管理工具建立約束:
管理索引
索引:二級索引(B 樹索引),索引的存在是為了提高查詢速度。索引存放的是索引列值和 rowid。一種資料庫物件,通過指標加速查詢速度,通過快速定位資料的方法,減少磁碟 I/O。索引與表相互獨立,索引佔用儲存空間(如果一個表越大,其索引也會越來越大),索引相當於一個小表,索引是有序的(按照索引欄位排序),在查詢時伺服器自動使用索引,DML 操作時自動維護索引。
索引不是越多越好,索引會降低 DML 的效率(DML 操作需要維護索引)。
索引包含:聚簇索引、二級索引、函式索引、點陣圖索引、組合索引等
組合索引建立時要注意索引列的順序(一般經常查詢的列放在前面,等值查詢的列放在前面)。
explain select * from hrtest.t_emp01 t where T.EMPLOYEE_NAME = '馬學銘';
create index ix_emp01_employeename ON HRTEST.T_EMP01(EMPLOYEE_NAME);
統計資訊的收集:
dbms_stats.gather_table_stats('HRTEST','T_EMP01');
統計資訊的檢視:
dbms_stats.table_stats_show('HRTEST','T_EMP01');
dbms_stats.index_stats_show('HRTEST','IX_EMP01_EMPLOYEENAME');
索引的監控:
alter index HRTEST.IX_EMP01_EMPLOYEENAME MONITORING USAGE; --開啟索引監控
alter index HRTEST.IX_EMP01_EMPLOYEENAME NOMONITORING USAGE; --關閉索引監控
select * from v$object_usage;
索引的重建(生成環境建議使用 online 方式重建,不影響表的 DML 操作):
alter index HRTEST.IX_EMP01_EMPLOYEENAME rebuild ONLINE;
索引的資料字典:
select * from dba_indexes t where t.OWNER ='HRTEST';
select * from dba_ind_columns t where t.index_OWNER ='HRTEST';
刪除索引:
drop index HRTEST.ix_emp01_employeename;
DM 管理工具建立索引:
管理檢視
普通檢視(物化檢視除外)中不包含資料,資料來源於基表。檢視提供一個查詢視窗。從使用者角度來看,一個檢視是從一個特定的角度來檢視資料庫中的資料。從資料庫系統內部來看,一個檢視是由 SELECT 語句組成的查詢定義的虛擬表
簡單檢視:單表查詢,不包含聚合函式、group by 等。一般可以支援 DML 操作,對檢視的DML 操作都會轉化為對基表的 DML 操作,DML 操作要滿足基表的約束條件。
複雜檢視:多表連線,包含聚合函式、group by 等。一般不支援增刪改操作。
第十部分:資料字典和動態效能檢視
資料字典
儲存在 SYSTEM 表空間中,包含物件定義、許可權、使用者角色等資訊。
USER_* 使用者所擁有的物件資訊
ALL_* 使用者能訪問的物件資訊
DBA_* 整個資料庫中的物件資訊
系統中所有物件的資訊
SELECT * FROM SYSOBJECTS;
系統中所有索引定義資訊
SELECT * FROM SYSINDEXES;
系統中所有列定義的資訊
SELECT * FROM SYSCOLUMNS
select * from sysstats;
select * from SYSOBJECTS t where id = 1058;
select * from SYSCONS; 動態效能檢視
動態效能檢視是從記憶體中或控制檔案中讀取的資料
SELECT * FROM V$BUFFERpool; --資料緩衝區
SELECT * FROM V$mem_pool;
顯示資料檔案、表空間資訊
SELECT * FROM V$DATAFILE;
SELECT * FROM V$tablespace;
顯示當前程式、執行緒資訊
SELECT * FROM V$PROCESS;
SELECT * FROM V$threads;
事務等待:
會話一:在 t_testpid(pid 為主鍵)中插入一行記錄:
開啟會話二:在 t_testpid 中插入相同記錄:
查詢事務等待:
select * from v$trxwait;
select t.TRX_ID, t.SESS_ID, t.SQL_TEXT, t.STATE, t.THRD_ID from v$sessions t;
select * from v$lock t where t.BLOCKED = 1;
sp_close_session(140279172804584); --結束某個 session
第十一部分:資料庫的備份還原
備份還原基本概念
備份包含物理備份、邏輯備份。物理備份是拷貝有效的資料頁。邏輯備份是匯出資料庫中邏輯資料。物理備份分為完全備份、增量備份;聯機備份(熱備)和離線備份(冷備)。
備份級別:全庫備份、表空間級備份、表級備份、歸檔備份。
增量備份包含差異增量備份和累積增量備份:差異增量備份的基礎備份集可以是全量備份,也可以是增量備份;累計增量備份的基備份集只能是全量備份。
物理還原是備份的逆過程;恢復是使用歸檔將資料庫恢復到最新狀態或指定時間點;或使用備份集中的 redo 資訊將資料庫恢復至一致性狀態。
離線備份與還原資料庫
離線備份(資料庫關閉狀態下的備份)
一、使用 dmrman 工具可以離線備份
庫備份(冷備):
RMAN> backup database '/dm8/data/DM/dm.ini';
表空間的還原和恢復(DM8 表空間聯機備份,離線還原)
測試場景:刪除 TBS01.DBF 資料檔案
表空間的還原:
RMAN> restore database '/dm8/data/DM/dm.ini' tablespace dmtbs from backupset '/dm8/backup/full/DMTBSFULL_02';
RMAN> recover database '/dm8/data/DM/dm.ini' tablespace dmtbs with archivedir '/dm8/arch';
全庫的還原與恢復
測試場景:刪除 system 資料檔案
假如 a(全量)->b1(增量)-> b2(增量)
-> c1(增量)
如果全量備份丟失,基於其增量的備份也將無法正常使用
(1)資料庫的還原
RMAN> restore database '/dm8/data/DM/dm.ini' from backupset
(2)資料庫的恢復
RMAN> recover database '/dm8/data/DM/dm.ini' with archivedir '/dm8/arch';
(3)更新是資料庫魔數
RMAN> recover database '/dm8/data/DM/dm.ini' update db_magic;
二、 使用 console 控制檯工具離線備份
資料庫備份
還原:
恢復:
更新資料庫魔數:
表空間還原時會校驗資料庫魔數:
select permanent_magic; --查詢資料庫永久魔數
select db_magic from v$rlog; --查詢資料庫當前魔數
聯機備份與還原資料庫
聯機備份:資料庫是啟動狀態,聯機備份要求資料庫開啟歸檔。
DM 預設使用 AP 服務備份(由引數 BAK_USE_AP),所以備份時要保證 AP 服務是啟動的。
BAK_USE_AP 1
動態,系
統級
備份還原實現策略。
1:DMAP 輔助程式方式,要求必須啟動DMAP 服務,可支援第三方備份。DMAP 外掛執行,改造了備份還原任務子系統,允許指定並行度,大幅提升了備份還原的效率,特別是加密、壓縮的處理效率。
2:無輔助程式方式,不依賴 DMAP,由主程式 DMSERVER 自身執行備份還原,但不支援
第三方備份。
DM 預設的備份路徑由引數 BAK_PATH 指定,建議備份路徑不要和資料庫原始資料檔案放在同一磁碟,避免磁碟損壞,資料檔案和備份檔案同時損壞的情況。
select * from v$parameter t where name in ('BAK_USE_AP','BAK_PATH');
select * from v$backupset; --檢視備份集
select * from v$ifun t where t.name like 'SF_BAKSET%';
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/full/');
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/incr/');
備份資料庫
backup database; --全量備份
backup database increment; --增量備份
backup database full to ONLINEBAK_01 backupset '/dm8/backup/full/ONLINEBAK_01';
backup database increment BASE ON BACKUPSET '/dm8/backup/full/ONLINEBAK_01' to ONLINEBAKINCR_01 backupset '/dm8/backup/incr/ONLINEBAK_01' ;
backup database increment with BACKUPDIR '/dm8/backup/full/' to ONLINEBAKINCR_02 backupset '/dm8/backup/incr/ONLINEBAK_02' ;
--校驗備份集
select SF_BAKSET_CHECK('DISK','/dm8/backup/incr/ONLINEBAK_02');
--表空間備份
backup tablespace dmtbs;
backup tablespace dmtbs INCREMENT with BACKUPDIR '/dm8/backup/full/' to DMTBSINCR_01 backupset '/dm8/backup/incr/DMTBSINCR_01' ;
backup table dmhr.employee; --表的備份
backup ARCHIVELOG all; --歸檔備份
庫級、表空間的還原和恢復不支援聯機恢復,只支援離線還原恢復。
DM 管理工具圖形化介面備份:
表空間備份:
邏輯備份
dexp 邏輯匯出、dimp 邏輯匯入
四個級別:
全庫(full=y)
按使用者(owner=XXX)
按模式(schemas=XXX)
按表(tables=XX)
全庫匯出:
[dmdba@馬吃水搬磚工人 dexp]$ dexp userid=sysdba/密碼:埠號
directory=/dm8/backup/dexp file=full.dmp log=full.log full=y
按使用者匯出:
dexp userid=sysdba/密碼:埠號 directory=/dm8/backup/dexp file=HRTEST.dmp log=HRTEST.log owner=HRTEST
按模式匯出:
dexp userid=sysdba/密碼:埠號 directory=/dm8/backup/dexp file=DMHR.dmp log=DMHR.log schemas=DMHR
按表匯出:
dexp userid=sysdba/密碼:埠號 directory=/dm8/backup/dexp file=EMPLOYEE.dmp log=EMPLOYEE.log tables=DMHR.EMPLOYEE
全庫匯入:
dimp userid=sysdba/密碼:埠號 directory=/dm8/backup/dexp file=full.dmp log=impfull.log full=y
按模式匯入(將 A 模式匯入到 B 模式,使用 REMAP_SCHEMA 引數):
dimp userid=sysdba/密碼:埠號 directory=/dm8/backup/dexp file=DMHR.dmp log=impDMHR.log REMAP_SCHEMA=DMHR:DMTEST
全庫匯出(DM 管理工具):
全庫匯入(DM 管理工具):
第十二部分:作業管理
建立代理環境:
sp_init_job_sys(1); --執行儲存過程
或介面上右擊【代理】,選擇【建立代理環境】:
建立作業:
call SP_CREATE_JOB('JOB01',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('JOB01');
call SP_ADD_JOB_STEP('JOB01', 'FULLBAK', 6,
'00000000/dm8/backup/full', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB01', 'FULLBAK', 1, 2, 1, 1, 0,
'22:00:00', NULL, '2021-12-22 16:32:21', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB01');
增量備份:
--檢視job
select * from sysjob.sysjobs;
--執行job
dbms_job.run(1640162093);
--檢視job執行日誌
select * from SYSJOB.SYSJOBHISTORIES2;
checkpoint(100); --執行完全檢查點
DM相容oracle的DBMS_JOB和DBMS_SHCEDULER.
SP_INIT_DBMS_SCHEDULER_SYS(1);
dbms_scheduler;
第十三部分:DM8 開發
DM 支援開發語言的種類
DM 開發語言介面配置
DM8 JDBC 程式設計注意事項
// 定義 DM JDBC 驅動串
String jdbcString = "dm.jdbc.driver.DmDriver";
// 定義 DM URL 連線串
String urlString = "jdbc:dm://localhost:埠號";
ODBC 的安裝:
(1)解壓
[root@馬吃水搬磚工人]# tar -zxvf unixODBC-2.3.0.tar.gz
(2)原始碼安裝三部曲(配置、編譯、安裝)
[root@馬吃水搬磚工人]# cd unixODBC-2.3.0/
[root@馬吃水搬磚工人 unixODBC-2.3.0]# ./configure
[root@馬吃水搬磚工人 unixODBC-2.3.0]# make
[root@馬吃水搬磚工人 unixODBC-2.3.0]# make install
(3) 配置 odbc.ini 資料來源資訊和 odbcinst.ini 驅動資訊
[root@馬吃水搬磚工人 unixODBC-2.3.0]# cd /usr/local/etc/
[root@馬吃水搬磚工人 etc]# vim odbcinst.ini
[root@馬吃水搬磚工人 etc]# vim odbc.ini
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014159/viewspace-2856755/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 達夢資料庫學習資料庫
- 達夢資料庫學習心得資料庫
- 資料庫國產化實戰之達夢資料庫資料庫
- 達夢資料庫學習筆記資料庫筆記
- 國產資料庫:達夢資料庫的幾個版本介紹資料庫
- 淺談達夢資料庫的備份與恢復資料庫
- 國產資料庫達夢資料庫(DM7)例項初始化引數淺析資料庫
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 八、python讀達夢資料庫資料庫MySqlPython
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 四、python讀mysql寫入達夢資料庫資料庫MySqlPython
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- 達夢資料庫安裝及基礎操作資料庫
- 達夢資料庫開發資料庫
- 初識達夢資料庫資料庫
- 達夢資料庫安裝資料庫
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 六、python讀mysql資料庫資料庫MySqlPython
- 淺談圖資料庫資料庫
- 圖資料庫淺談資料庫
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 七、python讀oceanBase資料庫資料庫MySqlPython
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 九、python讀金倉資料庫資料庫MySqlPython
- 織夢資料庫_織夢還原資料庫_織夢資料庫很卡資料庫
- 國產化之 .NET Core 操作達夢資料庫DM8的兩種方式資料庫
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- 達夢資料庫基礎---表資料庫
- 達夢資料庫日常運維資料庫運維
- 資料庫學習(二)資料操作語言:資料庫
- 鐳速如何適配國產資料庫(達夢)進行高效資料管理與共享資料庫
- 淺談資料庫事務資料庫
- 淺談資料庫連線資料庫
- 【達夢】Docker安裝達夢資料庫 dm8Docker資料庫
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 五、python讀mysql寫入金倉資料庫資料庫MySqlPython
- 達夢7資料庫初始化資料庫
- 達夢資料庫備份恢復資料庫
- 達夢資料庫之初步測試資料庫
- 達夢資料庫DCP培訓心得資料庫
- 達夢6.0試用之資料庫物件資料庫物件
- 資料庫學習與複習筆記--資料庫概念和不同類資料庫CRUD操作(1)資料庫筆記
- 配置ORACLE資料庫到達夢資料庫的異構DBLINKOracle資料庫
- 分散式資料庫強勢崛起,達夢資料庫如何破局?分散式資料庫