達夢資料庫初學心得
- 前言
- 2.安裝篇
-
- 2.1.達夢資料庫安裝
- 2.2.配置odbc
- 2.3.善用使用手冊
- 3.使用篇
-
- 3.1.DM8體系結構相關
- 3.2.維護表空間
- 3.3.使用者權限管理
- 3.4.模式對象管理
- 3.5.備份還原
- 4.總結
前言
前不久,我很幸運地獲得了為期3天的達夢DCA認證教育訓練的機會。本文介紹了學習中遇到的一些問題是怎麼解決的,記錄了從老師那裡學到的完整的操作流程,希望能對讀者有一些幫助。
本文内容在VMWare15+中标麒麟進階伺服器系統軟體V7.0+DM8親測有效。
2.安裝篇
2.1.達夢資料庫安裝
詳細的安裝步驟請參考連結: DM8資料庫安裝步驟于建立資料庫.
這裡補充一些老師強調的注意事項:
1)資料庫要遠端通路,應該要關閉防火牆或者是開放對應的端口号
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
[[email protected] ~]# systemctl status firewalld
2)應設定檔案最大打開數
- 重新開機伺服器生效
[[email protected] Packages]# vi /etc/security/limits.conf
dmdba soft nofile 4096
dmdba hard nofile 65536
- 臨時生效
3)不建議用root使用者安裝,我們學習中全程使用dmdba使用者安裝
4)一個資料庫軟體是可以建立多個執行個體,通過端口号差別,達夢預設端口号是 5236
2.2.配置odbc
1)檢查,确認已安裝gcc。以gcc-4.8.x開頭,
[[email protected] unixODBC-2.3.0]$ rpm -qa | grep gcc
gcc-4.8.5-36.el7.ns7.01.x86_64
gcc-gfortran-4.8.5-36.el7.ns7.01.x86_64
gcc-c++-4.8.5-36.el7.ns7.01.x86_64
libgcc-4.8.5-36.el7.ns7.01.x86_64
2)解壓/配置/編譯/安裝
cd /home/dmdba/
tar -xzvf unixODBC-2.3.0.tar.gz
cd /home/dmdba/unixODBC-2.3.0
./configure
make
make install
3)安裝後檢查版本:
[[email protected] unixODBC-2.3.0]# odbcinst -j
unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
4)修改配置檔案
vi /usr/local/etc/odbcinst.ini
[DM8 ODBC DRIVER ]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
vi /usr/local/etc/odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
Server = localhost
UID = SYSDBA
PWD = e2008jlpl #填真實的資料庫使用者SYSDBA的密碼
TCP_PORT = 5236
5)測試連接配接DM8:
[[email protected] dm8]$ which isql
/usr/local/bin/isql
[[email protected] dm8]$ isql dm8
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
2.3.善用使用手冊
在成功安裝DM8資料庫後,在安裝目錄/dm8/doc有豐富的使用手冊,幾乎大部分使用DM8的問題都可以從這些手冊中找到答案。

3.使用篇
3.1.DM8體系結構相關
1)可使用console修改參數,修改後需要重新開機資料庫服務生效
2)控制檔案隻有一個,會自動備份,預設10個備份
3)為了緩解日志頻繁切換造成的性能問題,需要調整重做日志檔案的大小,要麼擴大大小/要麼增加數量
4)重做日志是循環寫、可覆寫的
5)用一個SQL的執行過程來描述對線程和緩沖區的應用:
-
A用戶端發起請求(監聽線程監聽到請求,交給工作線程)
執行SQL語句時,
- B會做文法分析【關鍵字正不正确, 用到字典緩沖區和SQL緩沖區】、
- C再做語義分析【在不在表裡面,用到字典緩沖區】
- D在做權限分析【使用者有沒有權限通路表,用到字典緩沖區】
- E查詢SQL是否在buffer中,在内測邏輯讀;不在在磁盤中實體讀,并放到緩沖區 【SQL緩沖區、資料緩沖區、IO線程】
- F資料發生變更(日志緩沖區、日志重新整理線程、資料緩沖區、IO線程、工作線程)
- G是否有可用的執行計劃,有就按執行計劃執行,沒有就生成執行計劃,執行SQL,結果集傳回用戶端。(字典緩沖區,排序區,hash區,工作線程,IO線程,SQL緩沖區)
3.2.維護表空間
1)表空間資料檔案初始大小是4096*頁(8192)=32M
2)表空間不足時
- 可擴充資料檔案
- 也可添加資料檔案
3)更換資料檔案路徑
- 表空間脫機
- 更換路徑
- 表空間聯機
4)注意
- 表空間隻能改大不能改小
- system,roll,temp表空間不允許脫機,temp表空間不能被删除。
3.3.使用者權限管理
1)給使用者權限可以精确到列
grant SELECT("SALARY") on "DMHR"."EMPLOYEE" to "TBS";
grant SELECT("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "TBS";
2)不能對單個列的權限進行撤回,權限撤回是針對表級
revoke UPDATE("SALARY") on "DMHR"."EMPLOYEE" from "TBS" cascade;
錯誤号: -5658
錯誤消息: 第1 行附近出現錯誤:
隻能從整個表或視圖而不能按列 REVOKE
正确的語句:
3.4.模式對象管理
1)模式與使用者的關系
一個使用者可以對應多個模式/一個模式隻能屬于一個使用者;建立使用者時,會自動建立同名模式
2)ABC模式存在,則不允許建立同名ABC使用者
3)建立模式,要加/
SQL> CREATE SCHEMA BCD;
2 /
操作已執行
4)删除被外鍵限制依賴的表時,要先删除依賴的表,才能删除本表
建立表TEST4,依賴TEST3的ID列
create table "SYSDBA"."TEST4"
(
"ID" INT
);
alter table "SYSDBA"."TEST4" add constraint foreign key("ID") references "SYSDBA"."TEST3"("ID");
删除表test3失敗:
SQL> drop table test3;
drop table test3;
第1 行附近出現錯誤[-2639]:試圖删除被依賴對象[TEST3]
先删除表test4,再删除表test3,成功:
SQL> drop table test4;
SQL> drop table test3;
5)索引
-
作用:加快查詢速度,對更新少量資料時,可以提高更新速度;insert時會有延遲;
資料庫會自動維護索引,索引會占用存儲空間的。
- 建索引基本要求:經常查詢的列/where條件中出現的列/連接配接列/傳回少量或小部分資料
- 不适合建索引:列上有大量的空值/列上有大量的重複值/結果集傳回大量的資料
- 檢視索引有沒有用到
3.5.備份還原
1)冷備:DmAP服務需要開啟,不需要開啟歸檔,需要關閉資料庫執行個體。是針對整庫的備份。
2)熱備:需要開啟歸檔,需要開啟資料庫執行個體。
3)開啟歸檔:隻有當在配置狀态才能開歸檔;可以在DM管理工具->管理伺服器->系統管理圖形界面開啟歸檔。下面是開啟歸檔的sql語句:
alter database mount;
alter database add archivelog 'type=local,dest=/opt/dmdbms/data/arch,file_size=100,space_limit=0';
select name, arch_mode from v$database;
alter database open;
4)dmrman整庫備份/檢查/還原:
- 先關閉服務
[[email protected] bin]$ ./DmServiceDMSERVER stop
- 備份
- 檢查備份
- 還原
- 恢複
- 更新magic
- 最後開啟服務
[[email protected] bin]$ ./DmServiceDMSERVER start
5)整庫備份,還原單個表空間:
RMAN>backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
RMAN>restore database '/dm8/data/DAMENG/dm.ini' tablespace main from backupset '/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace main;
還原表空間不需要更新magic。
6)邏輯備份還原:
- 全庫導出
[[email protected] bin]$ ./dexp sysdba/e2008jlpl file=full.dmp log=full.log directory=/dm8/backup
- 使用者導出
[[email protected] bin]$ ./dexp sysdba/e2008jlpl file=test.dmp log=test.log directory=/dm8/backup owner=test
- 表導出
[[email protected] bin]$ ./dexp sysdba/e2008jlpl file=employee.dmp log=employee.log directory=/dm8/backup tables=dmhr.employee
- 全庫導入:
[[email protected] bin]$./dimp sysdba/e2008jlpl file=full.dmp log=imp_full.log directory=/dm8/backup full=y
注意:執行使用者導入時,如果使用者不存在,應先建立使用者,否則導入失敗。
4.總結
1)盡量使用dmdba使用者操作,不使用root使用者操作
2)可以盡量使用DM管理工具、DM控制台工具對資料庫進行管理,但也要熟練使用sql語句來處理
3)本人還隻是對達夢資料庫有了一些粗淺的認識,歡迎讀者指正。