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