dm8數據庫的安裝和使用講解


Dm8數據庫

1 、數據庫行業
1.1 關系型數據庫
Oracle 20c
DB2 (煙草、郵政)
Sqlserver 2014 2017
Mysql 8 開源(電商平台)
PG postgresql 開源
達夢 8 自主、原創
金倉 PG
神通 混元 pg mysql
南通 pg
高斯 pg
Oceanbase 阿里(螞蟻金服)
TDSQL 騰訊
Sybase erp
1.2 非關系型數據庫
Mongodb 文檔
Redis 內存 Mem
cache 內存
TimesTen
hadoop 集合數據庫
2 DM8 安裝
2.1 查看軟硬件信息
查看 cpu 信息
[root@localhost ~]# cat /proc/cpuinfo
要注意國產 cpu (飛騰、龍芯)
查看內存信息
[root@localhost ~]# free -m
注意:物理內存至少為 1G swap 分區一般是物理內存的 1.5
查看磁盤及分區信息 [root@localhost ~]# fdisk -l
[root@localhost ~]# df -h
網絡要求:
100m 網卡,支持 TCP/IP 協議
數據庫要遠程訪問,應該要關閉防火牆或者是開放對應的端口號。
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl status firewalld
系統要求:
內核要在 2.6 以上
[root@localhost ~]# uname -ar
安裝 gcc
[root@localhost yum.repos.d]# yum install -y gcc
2.2 規划路徑
[root@localhost yum.repos.d]# mkdir -p /dm8
2.3 規划安裝用戶(不建議用 root
[root@localhost dm8]# groupadd dinstall
[root@localhost dm8]# useradd -g dinstall dmdba
[root@localhost dm8]# passwd dmdba
更改用戶 dmdba 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
重新輸入新的 密碼:
passwd :所有的身份驗證令牌已經成功更新。
drwxr-xr-x. 2 root root 6 11 23 11:06 /dm8
[root@localhost dm8]# chown dmdba:dinstall -R /dm8
[root@localhost dm8]# ls -ld /dm8
drwxr-xr-x. 2 dmdba dinstall 6 11 23 11:06 /dm8
2.4 dmdba 用戶環境變量配置(可選項)
[root@localhost dm8]# su - dmdba

[dmdba@localhost ~]# vi .bash_profile
// 在.bash_profile最后增加

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export DM_HOME=/dm8
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
export LD_LIBRARY_PATH=/dm8/bin:$LD_LIBRARY_PATH

環境變量生效: [dmdba@localhost ~]$ source .bash_profile
2.5 設置文件最大打開數
重啟服務器生效
[root@localhost ~]# vi /etc/security/limits.conf
dmdba  soft  nofile  4096
dmdba hard nofile 65536
臨時生效
[root@localhost ~]# ulimit -n 65536
2.6 數據庫版本
開發版:不能作為商用,用時間和並發限制
標准版:小型應用,不支持集群等高級特性
企業版:支持數據庫高級特性,生產環境中使用最多
安全版:在企業版基礎上,四權分立,安全性有進一步提高
2.7 數據庫軟件安裝
GUI:
[root@localhost home]# mount -o loop /home/dm8_setup_rh7.iso /mnt
mount: /dev/loop0 寫保護,將以只讀方式掛載
[dmdba@localhost ~]$ cd /mnt
[dmdba@localhost mnt]$ ./DMInstall.bin 選擇 key ,點擊下一步
沒有 key 也可以安裝,替換 key 在路徑 $DM_HOME/bin ,重啟數據庫實例生效。
選擇典型安裝: 選擇安裝路徑: 安裝小結:
安裝中: root 賬號執行腳本:
查看 DmAP 服務
[dmdba@localhost bin]$ ./DmAPService status
[dmdba@localhost tool]$ ./dmservice.sh
bin 達夢數據庫命令,服務,庫文件
bin2 utf8
drivers : 驅動
license_en.txt license_zh.txt :許可信息
release_zh.txt release_en.txt :版本信息
uninstall uninstall.sh :數據庫卸載腳本
include c 語言頭文件
samples : 示 例
desktop :桌面
jar jar 包 (快速裝載,導入導出,日志挖掘)
log :數據庫日志信息
script :腳本
Web dem 相當於 oracle oem
doc :手冊
jdk java
tool :客戶端工具
CLI( 命令行安裝 )
[dmdba@localhost mnt]$ ./DMInstall.bin -i
2.8 數據庫軟件的卸載
GUI:
[dmdba@localhost dm8]$./uninstall.sh
CLI:
[dmdba@localhost dm8]$ ./uninstall.sh -i
注意:生產環境中在卸載數據庫之前,一定要記得先做好備份。
3 、創建數據庫實例
一個數據庫軟件是可以創建多個實例,通過端口號區別,達夢默認端口號是 5236
GUI:
[root@localhost ~]# su - dmdba
上一次登錄:一 11 23 11:30:46 CST 2020pts/3
[dmdba@localhost ~]$ export DISPLAY=192.168.128.1:0.0
[dmdba@localhost ~]$ xhost +
access control disabled, clients can connect from any host
xhost: must be on local machine to enable or disable accesscontrol.
[dmdba@localhost ~]$ cd /dm8/tool/
[dmdba@localhost tool]$ ./dbca.sh root 執行腳本 查看數據庫是否啟動:
[root@localhost ~]# ps -ef|grep dmserver
[root@localhost ~]# netstat -ntl|grep 5236
[dmdba@localhost bin]$ ./DmServiceDMSERVER status
[dmdba@localhost tool]$ ./dmservice.sh
CLI:
建庫查看幫助: [dmdba@localhost bin]$ ./dminit help
[dmdba@localhost
bin]$
./dminit
db_name=DAMENG02
instance_name=DMSERVER2
port_num=5237 path=/dm8/data
注冊服務查看幫助:
腳本所在路徑 /dm8/script/root
[root@localhost root]# ./dm_service_installer.sh -h
[root@localhost root]# ./dm_service_installer.sh
-t dmserver -p DMSERVER2 -dm_ini
/dm8/data/DAMENG02/dm.ini
4 、數據庫實例管理
4.1 數據庫狀態
Shutdown :關閉狀態
Mount :配置狀態
Open :數據庫打開狀態,對外提供服務
Suspend :掛起狀態
4.2 數據庫狀態切換
Shutdown - mount
Shutdown - open
Mount - open
Open - mount(oracle 不支持 )
Suspend - open
Open - suspend
Open - shutdown
Suspend 狀態只能查詢,不能寫
4.3 數據庫啟動過程
Shutdown-mount
根據 dm.ini 配置文件中的參數分配內存,啟動后台進程或者線程,找到控制文件並打開控
制文件。
Mount-open
根據控制文件打開所有的數據文件以及重做日志文件,校驗數據庫是否處於一致性狀態。
4.4 數據庫啟動關閉
4.4.1 通過前台方式啟動關閉數據庫
[dmdba@localhost bin]$ ./dmserver /dm8/data/DAMENG/dm.ini
[dmdba@localhost bin]$ exit
4.4.2 通過后台進程形式啟動關閉數據庫
[dmdba@localhost bin]$ ./DmServiceDMSERVER start
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
4.4.3 通過服務查看器啟停數據庫( root
5 、數據庫工具
5.1 disql
bin
[dmdba@localhost bin]$ ./disql sysdba/Dameng123:5236
tool 相 當 於 是 oracle sqlplus /nolog
[dmdba@localhost tool]$ ./disql
disql V8
SQL> select status$ from v$instance;
未連接
SQL> conn sysdba/Dameng123:5236
5.2 manager
[dmdba@localhost tool]$ ./manager
5.3 console
[dmdba@localhost tool]$ ./console
查看和修改參數
做冷備和恢復
5.4 DTS 遷移工具
5.5 性能監視工具
monitor
6 DMSQL
SQL :結構化查詢語言
DMSQL 基於 sql92 sql99 標准
6.1 DMSQL 分類
DML (數據庫管理) :select insert update delete DDL (數據庫定義): create drop alter table truncate
DCL (權限控制): grant revoke
TCL (事務控制): commit rollback
6.2 sql 的書寫規范
關鍵字不能被拆分
不區分大小寫,除了“” ’’ 以外
可以換行
6.3 簡單查詢
語法
Select () from ();
單列查詢
查詢員工表的姓名
SQL> select employee_name from dmhr.employee;
多列查詢
查詢員工表的姓名,部門編號,工資
select employee_name,department_id,salary from dmhr.employee;
查詢所有列
select * from dmhr.employee;
對列起別名
查詢員工的姓名和工資
select employee_name,salary as gzfrom dmhr.employee;
select employee_name,salary gz fromdmhr.employee;
連接 ||
查詢“ *** 的工資是: ***
select employee_name||' 的工資是: '||salary from dmhr.employee;
去重復 distinct( 隱藏排序 )
查詢部門編號
select distinct department_id from dmhr.employee
表達式: salary+1000
為所有人工資加 1000
select employee_name,salary,salary+1000 as total from dmhr.employee;
6.4 過濾查詢
語法
Select () from () where ()
比較運算符、邏輯運算、 in is null/is not null between*** and like
比較運算符: = > >= < <= <> !=
Select employee_name,salary fromdmhr.employee where employee_name=' 馬學銘 ';
Select employee_name,salary from dmhr.employee where salary>=30000;
邏輯運算符 :and or not
select employee_name,department_id,salary from dmhr.employee
where department_id=101
and salary>=10000;
select employee_name,department_id,salary from dmhr.employee
where department_id=103
or salary>=25000;
模糊查詢: like % _
% 匹配 0 個或多個字符
Select employee_name,salary from dmhr.employee where employee_name like ' %';
_ 匹配 1 個字符
Select employee_name,salary from dmhr.employee where employee_name like ' _';
IN
select employee_name,department_id
from dmhr.employee where department_id in
(101,102);
Is null/is not null null 為空,不等於 0
select employee_name,job_id from dmhr.employee where job_id is null;
Between... and ...
select employee_name,department_id,salary from dmhr.employee where
salary between 10000 and 20000;
6.5 排序
升序 asc
select employee_name,salary from dmhr.employee order by salary asc;
降序 desc
select employee_name,salary from dmhr.employee order by salary desc;
6.6 分組函數
Count max min avg sum
語法:
Select () from () where () group by () having ();
除了聚合函數不用跟在 group by 后面,其他 select 列必須要跟在 group by 后面, having
group by 的進一步過濾,不能單獨使用。
求部門工資和大於 10 萬的部門
select department_id,sum (salary) from dmhr.employee
group by department_id
having sum (salary) >100000;
6.7 多表連接查詢
6.7.1 內連接
結果集只顯示滿足條件的記錄
自然連接
查詢不需要指定連接列,根據列名自己過濾,兩個表連接的列名和數據類型要一致。
select employee_name,department_id,department_name from dmhr.employee natural join
dmhr.department;
交叉連接(笛卡集)
select count(*) from dmhr.employee;--856
select count(*) from dmhr.department;--46
39376
select count(*) from dmhr.employee cross join dmhr.department;
select count(*) from dmhr.employee,dmhr.department;
USING
在滿足多個連接列時,可以指定一個列做連接,連接的列前面不能加表名或者是前綴。
select
employee_name,department_name,department_id
from
dmhr.employee
join
dmhr.department
using (department_id);
ON
select a.city_name,b.street_address from dmhr.city a join dmhr.locationb
on a.city_id=b.city_id
Hash join
可以通過 hint 強制走 hash join
優化器 CBO 根據小表的連接列生成 hash 值,根據 hash 值去連接大表,掃描大表 select e.employee_name,d.department_name from dmhr.employee e inner hash join
dmhr.department d
on e.department_id=d.department_id;
6.7.2 外連接
結果集除了顯示滿足條件的記錄,不滿足的也顯示,用 null 代替
左外連接 left join
left join 左邊的全部顯示出來,右邊的只顯示滿足條件的記錄,不滿足條件的用 null 代替
select a.city_name,b.street_address from dmhr.city a left join dmhr.locationb
on a.city_id=b.city_id;
右外連接 right join
right join 右邊的全部顯示出來,左邊的只顯示滿足條件的記錄,不滿足條件的用 null
select a.city_name,b.street_address from dmhr.city a right join dmhr.locationb
on a.city_id=b.city_id;
全外連接 full join
左外 + 右外
select a.city_name,b.street_address from dmhr.city a full join dmhr.locationb
on a.city_id=b.city_id;
6.8 子查詢
當一個查詢是另一個查詢的條件時,就叫子查詢。子查詢先運行,子查詢的結果是主查詢的
件。子查詢可以嵌套子查詢,子查詢可以做為臨時表做連接。
單行子查詢
一次只返回一條記錄
select
employee_name,department_id
from
dmhr.employee
where
EMPLOYEE.DEPARTMENT_ID=(select EMPLOYEE.DEPARTMENT_ID from dmhr.employee
where employee_name=' 馬學銘 ');
多行子查詢
一次返回多條記錄
select employee_name,department_id,salary from dmhr.employee where salary > all(select
salary from dmhr.employee
where department_id=102);
7. DM8體系結構
DMSERVER:C/S 架構,由客戶端 + 服務器構成
數據庫 = 數據庫文件 + 實例
數據庫文件: 配置文件、控制文件、數據文件、重做日志文件 、歸檔日志文件、跟蹤日志文件、
備份文件
實例:一組進程 / 線程 + 共享內存
實例又分為單實例和集群( dsc
單實例就是一個實例管理一個數據庫, dsc 是多個實例管理一個數據庫,類似於 oracle rac
7.1DM8存儲結構
7.1.1 物理結構
配置文件
.ini 結尾的文件
dm.ini 滿足 oracle pfile+spfile 文件
可以查看視圖 v$dm_ini
select para_name,para_value,para_type from v$dm_ini ;
Sys: 系統級,影響全局
Session: 會話級,針對當前會話有效
Readonly :只讀,只能手動編輯參數文件
Infile :靜態參數,實例重啟才能生效。
修改參數有以下幾種方法:
1 Vi dm.ini 修改完成之后,無論是動態還是靜態參數,都需要重啟數據服務;
2 Sp_set_para_value( 參數類型 ,’ 參數名 ’, 參數值 )
1 等於 both ,即改即生效,會同時改變內存中和參數中的值。
2 等於 infile ,只改變參數中的值,需要重啟才能生效。
修改數據庫兼容模式 COMPATIBLE_MODE
是否兼容其他數據庫模式。
0: 不兼容 ,
1: 兼容 SQL92 標准 ,
2: 兼容 ORACLE,
3: 兼容 MS SQL SERVER,
4: 兼容 MYSQL
修改數據庫為兼容 oracle 的模式
sp_set_para_value(2,'COMPATIBLE_MODE',2); 3 )通過 console 工具修改參數,無論是動態還是靜態參數,都需要重啟數據服務;
4 Alter system 修改
數據文件
.DBF 結尾的文件
視圖: dba_data_files;
控制文件
.ctl 結尾的文件
控制文件中記錄了數據庫的模式,數據庫名, oguid ,上一次啟動時間,啟動次數,數據文件
的版本。
SQL> select para_name,para_value from v$dm_ini where para_name like '%PATH%';
查看控制文件內容
工具 dmctlcvt
查看幫助
[dmdba@localhost bin]$ ./dmctlcvt help
將控制文件轉換為文本文件
[dmdba@localhost bin]$ ./dmctlcvt type=1 src=/dm8/data/DAMENG/dm.ctl dest=/tmp/dmctl.txt
重做日志文件
重做日志文件記錄的是數據庫發生變化( insert,update,delete,alter,create )的信息。達夢沒有
日志組,至少需要兩個重做日志文件。重做日志的特點是循環寫,可覆蓋。重做日志文件可以
重命名、擴展大小,也可以添加。重做日志文件不能被刪除。重做日志文件頻繁切換會對數據
庫產生比較大的影響,考慮增加日志文件,或者是擴展文件大小。
視圖 :v$rologfile
查詢重做日志文件 新增重做日志文件
SQL> alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size 300;
resize 重做日志文件大小
SQL> alter database resize logfile '/dm8/data/DAMENG/DAMENG01.log' to 300;
SQL> alter database resize logfile '/dm8/data/DAMENG/DAMENG02.log' to 300;
遷移重做日志文件
alter database mount;
alter database rename logfile '/dm8/data/DAMENG/DAMENG01.log' to '/dm8/DAMENG01.log';
alter database open;
歸檔日志文件
就是重做日志文件的副本。用來做數據庫備份恢復,數據庫守護集群、讀寫分離集群的同步。
開啟歸檔:
CLI:
SQL> alter database open;
操作已執行
已用時間 : 00:00:01.781. 執行號 :0.
SQL> alter database mount;
SQL> alter database archivelog;
SQL> alter database add archivelog 'type=local,dest=/dm8/data/arch,file_size=100,space_limit=0';
SQL> select name,arch_mode from v$database;
行號 NAME ARCH_MODE
---------- ------ ---------
1
DAMENG Y
SQL> alter database open;
GUI:
將數據庫啟動到 mount 狀態 開啟歸檔模式並設定歸檔路徑及文件大小、空間限制等。
將數據庫啟動到 open 狀態
備份文件
.bak 為擴展名的文件。備份文件就是數據庫在某一個時間點的副本。
跟蹤日志文件
跟蹤日志文件記錄的是各會話執行的 sql 信息。還記錄了數據庫錯誤信息、性能相關問題。
通過參數 SVR_LOG ,默認值為 0 ,關閉。
7.1.2 邏輯結構
頁:默認為 8k ,支持 4k 8k 16k 32k 。是數據庫最小的分配單元。頁對應的是操作系統塊。
頁是由頁頭信息、數據、空閑空間、行偏移數組組成。頁頭信息包含了頁類型、頁地址,行偏
移數組記錄的數據和空閑空間的比例 (filefactor)
簇:
簇:簇是一組連續的頁組成,默認為 16 個頁,支持 16 32 個頁。一個簇總是在一個數據文件
中。
段:是簇的上級邏輯單元,段是可以跨多個數據文件的。段又分為數據段(表、索引),臨時
段,回滾段。
dba_segments
表空間:可以擁有一個或多個數據文件,一個數據文件只能屬於一個表空間。
7.2內存結構
共享內存池是 DMSERVER 啟動時從操作系統申請的一大片內存,實例在運行中可以向共享內存
池申請或者釋放內存。
MAX_OS_MEMORY :可以使用物理內存的百分比
MEMORY_POOL: 公共池,減少系統調用
MEMORY_TARGET :為 0 表示不限制內存使用。
運行時內存池:給特定模塊單獨使用,例如會話內存池和虛擬機內存池。
數據緩沖區
緩存的是數據頁(空閑、干凈、臟、正在使用),使用數據緩沖區可以提高數據庫的讀寫性能。
數據庫緩沖區設置的太小會造成性能問題,設置的過大,又會引起資源浪費。
參數: buffer 參考值: oltp 物理內存的 40%-60%
Olap 物理內存的 60%-80%
數據緩沖區有 4 種類型:
Normal keep :可以手動調整。默認為 normal
達夢緩存的是表空間, oracle 魂村的是表。
Fast recycle :系統自動管理。 Recycle 緩存的是臨時數據。
讀多頁:全表掃描比較多
Multi_page_get_num
日志緩沖區
存放的是重做日志信息,單位是頁,避免直接對磁盤進行操作,提升數據庫的性能。
重做日志的刷盤機制:每三秒,事務提交。
字典緩沖區
字典緩沖區主要緩存的是數據字典的信息,包含表,列的信息。數據庫中存在大量表或者表分
區時,應該要調整字典緩沖區。
SQL 緩沖區
用來存放執行計划, sql 結果集、包。對於 sql 類別比較多,應該調整 sql 緩沖區。
排序區 排序區就是 sql 排序需要的內存空間,在內存中無法完成將轉移到磁盤上(臨時表空間)
7.3線程結構
監聽線程
檢測來自客戶端的連接請求,把任務交給工作線程。
IO 線程
將數據頁從磁盤讀入數據緩沖區中,將數據緩沖區中的臟頁在一定機制(緩沖區滿,數據庫關
閉,執行檢查點)下刷到磁盤中。
日志刷新線程
將重做日志緩沖區中的記錄在一定機制下刷新(事務提交,執行檢查點,每 3 秒,緩沖區滿,
數據庫關閉)到重做日志文件。
日志歸檔線程
將重做日志文件在切換時拷貝到歸檔路徑下。
日志重做線程
主要用於數據庫恢復。
調度線程
檢查系統級的時間觸發器;
清理 SQL 緩存、計划緩存中失效的項,或者超出緩存限制后淘汰不常用的緩存項;
動態緩沖區檢查。根據需要動態擴展或動態收縮系統緩沖池;
自動執行檢查點 ;
會話超時檢測 ;
必要時執行數據更新頁刷盤;
喚醒等待的工作線程 ;
一個 SQL 執行過程
A 客戶端發起連接請求(監聽線程、工作線程)
B 語法分析(字典緩沖區、 SQL 緩沖區)
C 語義分析(字典緩沖區)
D 權限分析(字典緩沖區)
E 查看數據庫頁是否在 buffer 中,在內存中就會產生邏輯讀,不在就會產生物理讀(數據緩沖區,
sql 緩沖區, IO 線程)
F 數據發生變更(日志緩沖區、日志刷新線程,數據緩沖區, IO 線程,工作線程)
G 是否有可用的執行計划,有就按執行計划執行,沒有則生成執行計划,執行 sql ,結果集返回
客戶端。(字典緩沖區、排序區、 hash 區、工作線程、 IO 線程、 sql 緩沖區)
8、表空間
8.1查看表空間 介紹達夢數據庫表空間:
SYSTEM :系統表空間,存放數據字典信息、動態性能視圖
ROLL :回滾表空間,存放數據庫運行中的回滾記錄
TEMP :臨時表空間,做排序
MAIN :數據庫默認表空間,存放的是用戶的數據。創建用戶或者數據庫對象時不指定表空間,
就放在該表空間中。
HMAIN HUGE 表空間
查詢表空間和數據文件
8.2創建表空間
案例 1 :創建一個初始大小為 20m 的表空間。
SQL> create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' size 30m;
create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' size 30m;
*
1 , 102 [m] 附近出現錯誤 [-2007]:
語法分析出錯 . SQL> create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' size 30;
create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' size 30;
1 行附近出現錯誤 [-2410]: 數據文件 [/dm8/data/DAMENG/TEST01.DBF] 大小無效 .
已用時間 : 1.606( 毫秒 ). 執行號 :0.
表空間數據文件初始化大小是 4096* 頁( 8192 =32M
案列 2 :窗機表空間 TEST ,數據文件初始大小為 50M ,每次自動擴展 2M, 最大可擴展 1G;
create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST01.DBF' size 50 autoextend on next 2
maxsize 1024 CACHE = NORMAL;
作業:
創建表空間 TEST2 ,包含兩個數據文件,初始大小為 40M ,每次自動擴展 1M, 最大可擴展 10G;
8.3表空間狀態
脫機狀態
Alter tablespace test offline;
連接狀態
Alter tablespace test online;
查看表空間狀態 0 為聯機狀態, 1 為脫機狀態
8.4維護表空間
8.4.1 表空間不足
擴展數據文件
alter tablespace "TEST" resize datafile 'TEST01.DBF' to 2000;
添加數據文件
alter tablespace "TEST" add datafile '/dm8/data/DAMENG/TEST02.DBF' size 100 autoextend on next
1 maxsize 2000;
8.4.2 更換數據文件路徑
表空間脫機
Alter tablespace test offline;
更換路徑
SQL> alter tablespace test rename datafile '/dm8/data/DAMENG/TEST01.DBF' to '/dm8/TEST01.DBF';
表空間聯機
SQL> alter tablespace test online;
8.5維護回滾表空間
alter tablespace "ROLL" add datafile '/dm8/data/DAMENG/ROLL02.DBF' size 100 autoextend on next
1 maxsize 10240;
8.6臨時表空間 注意: system roll temp 表空間不允許脫機, temp 表空間不能被刪除。
8.7表空間刪除
Drop tablespace test;
9、用戶管理
9.1用戶
查看用戶
企業版數據庫預定義的用戶:
Sys :不能登錄,存放的數據字典和視圖
Sysdba :管理員
Sysauditor :審計員
Syssso :安全員
安全版用戶:
在企業版基礎上,增加 sysdbo ——數據庫對象操作員
規划用戶:
命名:以字母開頭, a-z 0-9 $#_, 長度不超過 128 個字符
權限分配:系統權限、對象權限、角色
存儲:表空間
密碼策略 :PWD_POLICY
設置系統默認口令策略。
0: 無策略 ;
1: 禁止與用戶名相同 ;
2: 口令長度不小於 9;
4: 至少包含一個大寫字母 (A-Z);
8 : 至少包含一個數字 (0 9);
16: 至少包含一個標點符號 ( 英文輸入法狀態下 , 除“和空格外的所有符號 ; 若為其他數字 , 則表示
配置值的和 , 3 1+2, 表示同時啟用第 1 項和第 2 項策略。
COMPATIBLE_MODE=1 ,PWD_POLICY 的實際值均為 0 3=2+1 6=2+4
例:將密碼策略設置為禁止與用戶名相同並且口令長度不小於 9
SQL> sp_set_para_value(1,'PWD_POLICY',3);
權限
權限就是我能具體做哪些事情?
權限分為系統權限和對象權限
對象權限
創建用戶
創建 tbs 用戶,用戶屬於 tbs 表空間, tbs 用戶有建表和建視圖的權限。
1 )創建 tbs 表空間
create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 32 CACHE = NORMAL;
2 )創建 tbs 用戶
create user "TBS" identified by "Dameng123"
limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10
default tablespace "TBS"; grant "VTI" to "TBS";
grant CREATE TABLE,CREATE VIEW to "TBS";
修改用戶
TBS 用戶可以查詢 dmhr.employee 的字段 employee_name,salary
grant SELECT("SALARY") on "DMHR"."EMPLOYEE" to "TBS";
grant SELECT("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "TBS";
不能查看 dmhr.employee.salary
不能對單個列的權限進行撤回,權限撤回是針對表級。
revoke select on dmhr.employee from tbs;
修改用戶默認表空間
alter user "TBS" default tablespace "TEST";
鎖定用戶
Alter user tbs account lock;
解鎖用戶
Alter user tbs account unlock;
刪除用戶
Drop user test;
9.2角色
角色是一組權限的集合,方便權限管理。角色是可以被授予給角色和用戶的。
創建角色
create role "R1";
grant "PUBLIC","RESOURCE" to "R1";
grant CREATE TABLE,CREATE VIEW,CREATE TRIGGER to "R1";
grant SELECT("EMPLOYEE_NAME"),UPDATE("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "R1";
授予角色給用戶
grant "R1" to "TBS";
撤回角色
revoke "R1" from "TBS";
啟用角色
禁用角色
刪除角色
Drop role r1;
10、模式對象管理
模式就是一組數據庫對象的集合
模式對象:表、索引、視圖、觸發器、存儲過程、同義詞、包、序列
模式與用戶的關系:
一個用戶可以對應多個模式,一個模式只能屬於一個用戶,創建用戶時會自動創建一個同名
的模式。
10.1模式
sysdba 用戶登錄,默認就是在 sysdba 模式下。
創建模式
SQL> create schema abc;
/
切換模式
SQL> set schema abc;
模式存在,則不允許創建與模式同名的用戶。
刪除模式
SQL>drop schema abc;
10.2表
系統表:數據庫自己創建和維護的表,存放的是數據庫信息
用戶表:自己創建的表,用戶的真實數據
DM 支持表的類型:
索引組織表、堆表、外部表、分區表
DM 默認表的類型是索引組織表, oracle 默認表的類型是堆表
10.2.1 創建表
1 )命名:以字母開頭, a-z,0-9,$#_
2 )數據類型 :int,number,date,char,varchar,clob,long,blob
3 )存儲位置 : 表空間,建表時沒有指定表空間,就存在用戶默認表空間中
4 )約束類型:主鍵約束、非空約束、唯一約束、外鍵約束、檢查約束
非空約束:
SQL> create table test (id char(20) not null);
SQL> insert into test values(null);
insert into test values(null);
[-6609]: 違反列 [ID] 非空約束 .
SQL> select * from test;
未選定行
DM 數據庫執行 sql 腳本 start oracle 數據庫執行 sql 腳本用 @
SQL> start /home/dmdba/test.sql
唯一約束;創建唯一約束會自動創建一個唯一索引,忽視空值,空不等於任何值。
查詢約束 dba_constraints
查詢索引 dba_constraints
SQL> create table test2 (id int unique,name varchar(20));
SQL> insert into test2 values(1,'111');
SQL> insert into test2 values(null,'111');
SQL> insert into test2 values(null,'111');
SQL> commit;
SQL> select * from test2;
行號 ID
NAME
---------- ----------- ----
1
1
111
2
NULL
111 3
NULL
111
SQL> insert into test2 values(1,'111');
[-6602]: 違反表 [TEST2] 唯一性約束 .
主鍵約束:非空 + 唯一,一個表只能有一個主鍵,設計主鍵盡量避免業務邏輯的列
SQL> create table test3 (id int primary key);
外鍵約束:保證數據完整性
create table "SYSDBA"."TEST4"
(
"ID" INT
);
alter table "SYSDBA"."TEST4" add constraint foreign key("ID") references "SYSDBA"."TEST3"("ID");
SQL> insert into test4 values(1);
[-6607]: 違反引用約束 [CONS134218845].
SQL> insert into test3 values(1);
SQL> commit;
SQL> insert into test4 values(1);
SQL> commit;
SQL> drop table test3;
drop table test3;
1 行附近出現錯誤 [-2639]: 試圖刪除被依賴對象 [TEST3].
SQL> drop table test4;
SQL> drop table test3;
檢查約束
SQL>create table test5 (id int check(id>5));
SQL> insert into test5 values(6);
SQL> insert into test5 values(5);
insert into test5 values(5);
[-6604]: 違反 CHECK 約束 [CONS134218846].
10.2.2管理表
重命名表:
Alter table test2 rename test1;
添加列:
alter table "SYSDBA"."TEST1" add column("add" VARCHAR(50));
刪除列
alter table "SYSDBA"."TEST1" drop column "add";
10.2.3 管理約束
查看約束
select constraint_name,table_name,status from user_constraints;
啟用約束
Alter table test1 enable constraint CONS134218843; 禁用約束
Alter table test1 disable constraint CONS134218843;
刪除表:
drop table test1;
10.3視圖
視圖就是一個查詢語句,一張虛擬表
DM 視圖:簡單視圖、復雜視圖、物化視圖
創建視圖的語法:
Create view () as select ***;
Create or replace view() as select ***;
創建視圖
create view view_emp as
select a.EMPLOYEE_ID,a.EMPLOYEE_NAME,a.DEPARTMENT_ID,a.SALARY
from dmhr.employee a
where a.DEPARTMENT_ID=105;
刪除視圖
drop view view_emp;
10.4索引
索引是數據庫對象。
索引作用:加快查詢速度,對更新少量數據時,可以提高更新速度, insert 時會有延遲。
數據庫會自動維護索引,索引會占用存儲空間的。
創建索引基本要求:
經常查詢的列
Where 條件中出現的列
連接列
返回少量或小部分數據
不合適建立索引:
列上有大量的重復值
列上有大量的 null
結果集返回大量的數據
創建索引
create index "IND_EMP" on "SYSDBA"."EMP"("EMPLOYEE_NAME") storage(initial 1,next
1,minextents 1,on "DMHR");
查看索引信息
User_indexes
查看 sql 執行計划
explain select * from emp where employee_name='aaa'; 搜集統計信息
搜集統計信息后的執行計划
維護索引:
重建索引:提升數據庫的性能
Alter index IND_EMP rebuild;
刪除索引:
drop index IND_EMP ;
11、備份還原
備份就是數據庫在某一個時間點的副本
數據庫備份目的:防止數據丟失,防止天災人禍(地震、火災、人為操作、硬件故障)
備份主要有物理備份和邏輯備份
物理備份主要是備份使用過的有效的數據頁,邏輯備份主要是備份數據庫對象(表,索引,
視圖,存儲過程等)
物理備份:分為聯機備份和脫機備份;完全備份和增量備份
完全備份:備份的是整個數據庫或者表空間的全部數據
增量備份:備份的是上一次全備或增備后,以后每次備份只需要備份修改過的數據頁
還原就是將某個時間點的數據庫副本拷貝到對應的目錄下。
恢復就是在完成數據庫還原之后,應用部分或者是全部歸檔日志。
11.1物理備份
冷備:
冷備:不需要開啟歸檔,需要開啟 DmAP 服務,需要關閉數據庫實例,針對整庫做備份
1 console 工具備份
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
2 、用 dmrman 工具備份,只支持冷備
[dmdba@localhost backup]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
熱備:
需要開啟歸檔,數據庫需要打開( open
可以備份數據庫、表空間、表、歸檔日志
查看數據庫歸檔模式:
SQL> select name,arch_mode from v$database;
行號 NAME ARCH_MODE
---------- ------ ---------
1
DAMENG Y
manager 工具做熱備
整庫備份 查看備份
命令行做全備: disql 工具
SQL> backup database full to "DB_DAMENG_FULL";-- 備份到參數文件中的備份路徑
SQL> backup database full to "DB_DAMENG_FULL2" BACKUPSET '/dm8/backup';
做增量備份 backup database increment to "DB_DAMENG_INCRE_2020_11_25_14_24_14" backupset
'DB_DAMENG_INCRE_2020_11_25_14_24_14';
表空間備份
表空間備份只能聯機,還原只能脫機
manager 工具
disql
backup tablespace "DMHR" full to "TS_DMHR_FULL_2020_11_25_14_31_44" backupset
'TS_DMHR_FULL_2020_11_25_14_31_44';
表備份: backup table "DMHR"."DEPARTMENT" to "TAB_DMHR_DEPARTMENT_2020_11_25_14_34_57"
backupset 'TAB_DMHR_DEPARTMENT_2020_11_25_14_34_57';
歸檔備份:
backup archivelog all to "ARCH_2020_11_25_14_36_55" backupset 'ARCH_2020_11_25_14_36_55';
11.2物理還原
檢查備份集是否有效
Console 工具還原
恢復 dmrman 工具還原
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/data/arch';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
表空間還原
RMAN>restore database '/dm8/data/DAMENG/dm.ini' tablespace MAIN from backupset
'/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace MAIN;
11.3邏輯備份
備份的是數據庫對象
邏輯備份可以用來遷移和重組數據庫,是數據庫輔助型備份
dexp/dimp 四個級別導入導出:
庫級別
用戶
模式
查看幫助:
[dmdba@localhost bin]$ ./dexp help
[dmdba@localhost bin]$ ./dimp help
全庫導出:
[dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=full.dmp log=full.log
directory=/dm8/backup full=y
用戶導出:
[dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=dmhr.dmp log=dmhr.log
directory=/dm8/backup owner=dmhr
導出表:
[dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=emp.dmp log=emp.log
directory=/dm8/backup tables=emp
全庫導入:
[dmdba@localhost bin]$ ./dimp sysdba/Dameng123 file=full.dmp log=imp_full.log
directory=/dm8/backup full=y
注意事項:執行用戶導入時,如果用戶不存在,要先創建用戶。
12、作業
新建作業 1 ,每周三,每周日 22:00 做全備 call SP_CREATE_JOB('JOB1',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('JOB1');
call SP_ADD_JOB_STEP('JOB1', 'B1', 5, '01000/dm8/backup', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB1', 'd3', 1, 2, 1, 9, 0, '16:15:44', NULL, '2020-11-25 22:00:00', NULL,
'');
call SP_JOB_CONFIG_COMMIT('JOB1');
新建作業 2 ,每周一、二、四、五、六做增量備份 call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('JOB2');
call SP_ADD_JOB_STEP('JOB2', 'B2', 5, '11000/dm8/backup|/dm8/backup/incr', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB2', 'd2', 1, 2, 1, 118, 0, '22:00:00', NULL, '2020-11-25 22:00:00',
NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB2');
13、DM8開發
Linux 配置 odbc
root 配置
檢查 gcc
[root@localhost home]# rpm -qa|grep gcc
gcc-4.8.2-16.el7.ns7.03.x86_64
[root@localhost home]# tar -xvf unixODBC-2.3.0.tar.gz
[root@localhost home]# cd unixODBC-2.3.0/
[root@localhost unixODBC-2.3.0]# ./configure
[root@localhost unixODBC-2.3.0]# make && make install
[root@localhost unixODBC-2.3.0]# odbcinst -j
配置文件 /usr/local/etc/odbcinst.ini
配置文件 /usr/local/etc/odbc.ini

[root@localhost unixODBC-2.3.0]#cd /usr/local/etc/
對/usr/local/etc目錄下的2個文件(odbc.ini和odbcinst.ini)進行修改配置

其中DRIVER根據達夢8數據庫的安裝路徑而定

[root@localhost etc]# vim odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
DRIVER = /dm8/bin/libdodbc.so

[root@localhost etc]# vi odbc.ini
[dm8]
Description = DM ODBC DSND
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5238
其中SERVER、UID、PWD、TCP_PORT可以根據實際情況進行修改

export LD_LIBRARY_PATH=/dm8/bin:$LD_LIBRARY_PATH

 
測試連接
dmdba賬號
[dmdba@localhost bin]$ isql dm8
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM