达梦8 DCA认证笔记
接公司領導圣旨,參加達夢數據庫DCA課程培訓。培訓三天的時間收獲很多,因疫情原因有點擔心是線下培訓,但又擔心線上課程效果不好。總之糾結。聽了半天的課程后就打消我的顧慮,感謝達夢大學和我的授課老師,耐心的幫助和仔細的講解,效果非常好。順便幫助國產數據庫達夢宣傳一下 ,有想學習的 請加唯一官方QQ:2908982381(達夢大學)
三天時光充實,短暫。
本文重點介紹命令行式操作,圖形化較簡單。理解下就能操作。
1.國內數據庫行業的發展趨勢,信創的本質;
2.DM8數據庫新特性;
3.DM8安裝+實例管理;
4.體系結構;
5.表空間管理;
6.用戶管理;
7.dmsql;
8.模式對象管理;
9.備份和還原;
10.作業創建和管理;
11.jdbc和odbc。
1.數據庫行業概況
主要的幾個派系
oracle mysql pg sqlserver db2 informix
Hbase MongoDB
2.DM8 新特性:
(龍芯,飛騰,鯤鵬,海光,申威等)。軟件(國產的 OS—
麒麟,統信等),辦公系統(金山 WPS,永中),中間件(東
方通,中創,金蝶等),存儲(長城,曙光,華為等))兼
容適配
中心)
數據是否有副本) 計算節點—日志節點—存儲節點,不
損傷 SQL
節點)
3 DM8 安裝
軟件:OS
內核版本:[root@localhost ~]# uname -r 2.6 以上內核
發行版本:[root@localhost ~]# cat /etc/issue
位數:[root@localhost ~]# uname -m
[root@localhost ~]# cat /proc/cpuinfo
查看硬盤、分區信息
[root@localhost ~]# fdisk -l
[root@localhost ~]# df -h
遠程訪問數據庫需要關閉防火墻
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
規劃路徑
[root@localhost /]# mkdir -p /dm8
安裝用戶(建議不要使用root)
[root@localhost /]# groupadd dinstall
[root@localhost /]# useradd -g dinstall dmdba
[root@localhost /]# passwd dmdba
更改用戶dmdba 的密碼。
新的密碼:
無效的密碼: 密碼少于8 個字符
重新輸入新的密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost /]# chown dmdba:dinstall /dm8 -R
[root@localhost /]# ls -ld /dm8
配置dmdba 用戶環境變量(可選項)
環境變量生效:
[dmdba@localhost ~]$ source .bash_profile
export DM_HOME=/dm8
export
PAHT=DMHOME/bin:DM_HOME/bin:DMH?OME/bin:PATH:HOME/.local/bin:HOME/.local/bin:HOME/.local/bin:HOME/bin
設置最大文件打開數
修改之后重啟生效
[root@localhost /]# vi /etc/security/limits.conf
dmdba soft nofile 4906
dmdba hard nofile 65536
臨時生效:ulimit -n 65536
數據庫版本
開發版:有時間和并發數限制,不能作為商用
標準版:小型應用,沒有集群等高級功能和特性
企業版:三權分立,大中型企業使用,具有集群等高級特性安全版:基于企業版的四權分立,安全特性進一步增強(強訪問控制、
客體重用等)
安裝包的類型: .iso .tar.gz .zip
ISO:掛載
ZIP:解壓
[dmdba@localhost ~]$ file XXX (linux 不以文件的擴展名
了識別文件類型)
數據庫軟件安裝
[root@localhost home]# mount -o loop
dm8_20201107_x86_rh6_64_ent_8.1.1.144.iso /mnt
mount: /dev/loop0 寫保護,將以只讀方式掛載
[root@localhost dmdba]# xhost +
(
在這里自己機器上實驗的時候,會出現打不開可視化圖形的情況 配置一下DISPLAY即可
su - dmdba
export DISPLAY=localhost:1
如果用win ssh遠程過去
root登錄
xhost +
su - dmdba
export DISPLAY=192.168.0.166:0 (win機器ip)
)
[dmdba@localhost mnt]$ ./DMInstall.bin
執行腳本(用root 賬號)
/dm8/script/root/root_installer.sh
CLI:命令行的交互式安裝
[dmdba@localhost mnt]$ ./DMInstall.bin -i
安裝目錄的結構和內容:
bin:庫文件和達夢常用的命令
bin2 :UTF8
Desktop:桌面
Drivers:驅動
jar :jar 包,存放的是邏輯備份、數據快速加載、日志挖掘
license_en.txt license_zh.txt :許可信息
log :日志
release_zh.txt release_en.txt :版本信息
script :腳本
uninstall uninstall.sh :卸載
web :dem 類似oracle oem
doc :文檔
include :頭文件(.h)
jdk :java
Samples :示例
tool :客戶端工具
卸載數據庫軟件
注意:在卸載數據庫之前,需要將數據庫備份,然后關閉實例、刪除
數據庫及卸載數據庫軟件
[dmdba@localhost dm8]$ ./uninstall.sh -i
創建數據庫實例
一個數據庫軟件是可以安裝多個實例,通過端口號來區分
cd /dm8/tool
[dmdba@localhost tool]$ ./dbca.sh
初始化數據庫
判斷數據庫實例是否啟動:
[dmdba@localhost ~]$ dmservice.sh
查看DM進程
[dmdba@localhost ~]$ ps -ef|grep dmserver
[dmdba@localhost ~]$ netstat -ntl|grep 5236
[dmdba@localhost ~]$ DmServiceDMSERVER status
[dmdba@localhost ~]$ systemctl status DmServiceDMSERVER.service
手動創建實例TEST:
./dminit path=/dm8/data db_name=DB_TEST instance_name=TEST PORT_NUM=5239
創建服務:
[dmdba@localhost ~]$ cd /dm8/script/root/
[dmdba@localhost ~]$ dm_service_installer.sh -h
[root@localhost ~]# ./dm_service_installer.sh -t dmserver -p TEST -dm_ini /dm8/data/DB_TEST/dm.ini
DM8 數據庫實例管理
數據庫的狀態
Shutdown:關閉狀態
Mount:配置狀態
Open:數據庫打開狀態,數據庫對外提供服務
Suspend:掛起狀態
數據庫狀態的切換
Shutdown -mount
Shutdown -open
Open-shutdown
Mount-open
Open-mount(oracle 不支持)
Open-suspend
Suspend-open
Dm 數據庫不支持mount-suspend 狀態,suspend-mount 狀態
數據庫啟動過程
Shutdown-mount
根據配置文件dm.ini 分配共享內存,啟動后臺進程/線程,找到控制
文件的位置,驗證控制文件是否損壞,最后打開控制文件。
Mount-open
根據控制文件找到數據庫的數據文件和重做日志文件,分析數據庫是
否需要做恢復。
數據庫啟動和關閉
通過進程的形式啟停數據庫
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
[dmdba@localhost bin]$ ./DmServiceDMSERVER start
在前端啟停數據庫
[dmdba@localhost bin]$ ./dmserver /dm8/data/DAMENG/dm.ini
關閉數據庫:exit
用服務查看器啟停數據庫(root 賬號執行)
數據庫工具
disql
/dm8/bin
類似于oracle 的Sqlplus / as sysdba
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA:5239
[dmdba@localhost bin]$ cd /dm8/tool/
類似于oracle 的Sqlplus /nolog
[dmdba@localhost tool]$ ./disql
disql V8
SQL> conn SYSDBA/SYSDBA:5239
管理工具manager
./manager
性能監控工具monitor
./monitor
遷移工具dts
./dits
console 工具
./console
查看和調整參數
DMSQL
SQL結構化查詢語言,提供了應用程序到數據庫的一個接口。
DMSQL 分類
DML(數據操作語言):insert update delete select
DDL(數據定義語言):create table,drop table,alter table ,truncate
DCL(數據控制語言):權限的授予或撤回,grant,revoke
TCL(事務控制語言):commit, rollback ,save moint
簡單 不做具體分享
DM8 體系結構
DMSERVER:C/S 架構,客戶端+服務器構成
DMSERVER=數據庫文件+實例
實例=共享內存+后臺進程/線程
非DSC 架構是一個實例對應一個數據庫,DSC 架構是一個數據庫可以
對應多個實例
DM8存儲結構
物理結構
配置文件
以.ini 結尾的文件
[dmdba@localhost DAMENG]$ ls -l *.ini
查詢視圖:
select para_name,para_value from v$dm_ini where para_name like
‘COMPAT%’;
SYS 系統級:影響全局
Session 會話級:針對當前會話有效
Infile:靜態參數,實例重啟才能生效
sp_set_para_value(2,‘COMPATIBLE_MODE’,2);
1 等于both,會改變內存和參數文件中的值。
2 等于infile,會改變參數文件中的值,重啟才能生效。
數據文件
以.DBF 結尾的文件
[dmdba@localhost DAMENG]$ ls -l *DBF
控制文件
以.ctl 結尾的文件
select para_name,para_value from v$dm_ini where para_name like
‘%PATH%’;
查看控制文件內容:
[dmdba@localhost bin]$ ./dmctlcvt TYPE=1
SRC=/dm8/data/DAMENG/dm.ctl DEST=/tmp/dmctl.txt
注意:不要隨便修改控制文件
重做日志文件
查詢重做日志文件:
select file_id,path,rlog_size from v$rlogfile;
重做日志文件記錄的是數據庫發生變更信息。重做日志文件的特點是
可覆蓋,循環寫。重做日志文件頻繁切換會對數據庫產生較大的性能
影響。
resize 重做日志文件
alter database resize logfile ‘/dm8/data/DAMENG/DAMENG01.log’ TO
300;
alter database resize logfile ‘/dm8/data/DAMENG/DAMENG02.log’ TO
300;
新增重做日志文件:
alter database add logfile ‘/dm8/data/DAMENG/DAMENG03.log’ size
300;
注意:重做日志文件不能被刪除,所有日志文件大小需要一致。
歸檔日志文件
就是重做日志文件的副本,用來做數據庫恢復。
開啟歸檔:
命令行開歸檔
[dmdba@localhost DAMENG]$ disql sysdba/dameng123
服務器[LOCALHOST:5236]:處于普通打開狀態
登錄使用時間: 14.156(毫秒)
disql V8
SQL> alter database mount;
操作已執行
已用時間: 00:00:01.783. 執行號:0.
SQL>alter database add archivelog ‘type=local,dest=/dm8/arch,file_size=100,space_limit=0’;
操作已執行
已用時間: 12.152(毫秒). 執行號:0.
SQL> alter database archivelog;
操作已執行
已用時間: 5.841(毫秒). 執行號:0.
SQL> alter database open;
操作已執行
已用時間: 00:00:01.866. 執行號:0.
SQL> select name,arch_mode from v$database;
行號 NAME ARCH_MODE
1 DAMENG Y
已用時間: 8.372(毫秒). 執行號:1803.
圖形化開歸檔
備份文件
以.bak 為擴展名的文件,備份文件就是數據庫在某一個時間點的副
本。.meta 元數據文件(備份集的信息),.bak 數據備份文件(真實的數據)
跟蹤日志文件
跟蹤日志文件記錄的是系統各會話執行的sql 語句的信息,主要是錯
誤的信息、性能問題。跟蹤日志文件默認是關閉的。SVR_LOG
select para_name,para_value from v$dm_ini where para_name=‘SVR_LOG’;
事件日志文件
記錄的是數據庫運行期間產生的關鍵性事件:數據庫的啟動、關閉、
IO 錯誤、內存申請失敗。
邏輯結構
頁(塊):默認為8k(8192 字節),支持4k、8k、16k、32k。數據
頁是數據庫最小的分配單元。包含了頁頭信息,數據,空閑空間,行
偏移數組。Filefactor
簇:簇是一組連續的數據頁組成,默認為16 個頁,支持16、32 個頁,
總是在一個數據文件中。
段:是簇的上級邏輯單元,段是可以跨多個數據文件的。段分為數據
段(表段、索引段),臨時段,回滾段。
select * from user_segments;
表空間:可以擁有一個或多個數據文件,一個數據文件只能屬于一個
表空間。
內存結構
–共享內存池是DM SERVER 啟動時從操作系統申請的一大片內存,實
例在運行中可以在共享內存池中進行申請或釋放。
select para_name,para_value from v$dm_ini where para_name like ‘%MEMORY%’;
MEMORY_TARGET 為0 表示不限制內存使用
MEMORY_POOL:公共池,減少系統調用
MAX_OS_MEMORY:可以使用物理內存的百分比
–運行時內存池給某個模塊單獨使用,例如會話內存吃和虛擬機內存
池。
–數據緩沖區
緩存數據頁,使用數據緩沖區可以提供數據庫的性能。
參數:buffer
select para_name,para_value from v$dm_ini where para_name like ‘%BUFFER%’;
參考值:oltp 物理內存的40%-60%
Olap 物理內存的60%-80%
數據緩沖區有4 種類型:
Normal keep:可以手動調整,normal 是默,keep 緩存的是表空間。
(Oracle keep 緩存的是表)
fast recycle:系統自動管理。Recycle 緩存臨時數據。
讀多頁:全表掃描比較多,可以考慮調整該參數。
重做日志緩沖區
存放日志的緩沖區,單位頁,避免直接對磁盤IO 進行讀寫,提高了
數據庫的性能。
select para_name,para_value,para_type from v$dm_ini
where para_name like ‘%RLOG_%’;
重做日志刷盤的機制:每3 秒,事務提交。
SQL 緩沖區
用來存放包、執行計劃、sql 結果集。對于sql 類別比較多,包、存儲
過程比較多,應該適當調整sql 緩沖區。
select para_name,para_value from v$dm_ini where para_name like ‘%CACHE_POOL%’;
是否開啟sql 重用計劃:
select para_name,para_value from v$dm_ini where para_name like ‘%USE_PLN%’;
字典緩沖區
字典緩沖區主要存的是數據字典的信息,包含表的信息,列的信息。
當我們數據庫中存在大量分區表、大量表時應該適當調整字典緩沖
區。
select para_name,para_value from v$dm_ini where para_name like ‘%DIC%’;
HASH 緩沖區
主要是表在HASH 連接時會用到,虛擬的內存池,只有在做HASH 連
接使,才會生成、分配空間。
select para_name,para_value from v$dm_ini where para_name like ‘%HJ_BUF%’;
SSD 緩沖區
默認SSD 緩沖區是關閉的,即SSD_BUF_SIZE 為0。若要配置SSD
緩沖區,將其設置為大于0 的數并指定SSD_FILE_PATH 即可
線程結構
監聽線程
檢測來自客戶端的連接請求,并把任務交給工作線程。
IO 線程
將數據頁從磁盤讀入數據緩沖區中,將數據緩沖區中的臟頁在一定機
制(執行檢查點,數據庫關閉,buffer 滿)下更新到磁盤中。
日志刷新線程
將重做日志緩沖區中的記錄在一定機制下刷到重做日志文件中。
日志歸檔線程
將重做日志文件在切換時拷貝到歸檔路徑下做副本。分為本地歸檔、
同步歸檔、異步歸檔。
日志重做線程
主要用于數據庫的故障恢復。
調度線程
檢查系統級的時間觸發器;
清理SQL 緩存、計劃緩存中失效的項,或者超出緩存限制后淘汰不
常用的緩存項;
動態緩沖區檢查。根據需要動態擴展或動態收縮系統緩沖池;
自動執行檢查點;
會話超時檢測;
必要時執行數據更新頁刷盤;
喚醒等待的工作線程;
SQL 執行過程
A 客戶端發起連接請求(監聽線程、工作線程)
B 語法分析(字典緩沖區、SQL 緩沖區)
C 語義分析(字典緩沖區)
D 權限分析(字典緩沖區)
E 查看數據頁是否在內存中,不在內存就會產生物理讀,在內存中就
會產生邏輯讀(數據緩沖區、sql 緩沖區、IO 線程)
F 數據發生變更(日志刷新線程、日志緩沖區、數據緩沖區、IO 線程)
G 是否有可用的執行計劃,如果有就按執行計劃執行sql,如果沒有
生成執行計劃,運行sql,結果集返回客戶端。(字典緩沖區、排序
區、hash 區,工作線程,SQL 緩沖區)。
表空間
查看表空間
SQL> select tablespace_name,file_name from dba_data_files;
行號 TABLESPACE_NAME FILE_NAME
1 SYSTEM /dm8/data/DAMENG/SYSTEM.DBF
2 DMHR /dm8/data/DAMENG/DMHR.DBF
3 BOOKSHOP /dm8/data/DAMENG/BOOKSHOP.DBF
4 MAIN /dm8/data/DAMENG/MAIN.DBF
5 TEMP /dm8/data/DAMENG/TEMP.DBF
6 ROLL /dm8/data/DAMENG/ROLL.DBF
介紹達夢數據庫表空間:
System:數據字典相關信息、動態性能視圖
ROLL:數據庫運行中的回滾記錄
TEMP:臨時表空間,排序
MAIN:數據庫的默認表空間,存放的是用戶的真實數據。創建用戶
或者創建數據庫對象時,沒有指定表空間,就會存放在默認表空間
(main)中。
HMAIN:HUGE 表空間
查詢表空間和數據文件:
SQL> select tablespace_name,file_name from dba_data_files;
創建表空間
案例1:創建一個初始值為30M 表空間。
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]大小無效.
已用時間: 0.962(毫秒). 執行號:0.
表空間數據文件初始大小是4906*頁(8192)=32M
案列2:創建表空間TBS,初始大小為50M,每次擴展2M,最大擴展
到1024M;
create tablespace “TBS” datafile ‘/dm8/data/DAMENG/TBS01.DBF’ size 50 autoextend on next 2 maxsize 1024 CACHE = NORMAL;
案例3:創建表空間TBSA,包含兩個數據文件,初始大小為35M,
每次擴展1M,最大可擴展到1024M;
create tablespace “TBSA” datafile ‘/dm8/data/DAMENG/TBSA01.DBF’ size 35 autoextend on next 1 maxsize 1024, ‘/dm8/data/DAMENG/TBSA02.DBF’ size 35 autoextend on next 1 maxsize 1024 CACHE = NORMAL;
8.3 表空間狀態
脫機狀態
Alter tablespace tbs offline;
聯機狀態
Alter tablespace tbs online;
維護表空間
表空間不足
增加數據文件
alter tablespace “TBS” add datafile ‘/dm8/data/DAMENG/TBS02.DBF’
size 32;
數據文件開啟自動擴展
alter tablespace “TBS” datafile ‘TBS02.DBF’ autoextend on next 1 maxsize 1024;
resize 數據文件
alter tablespace “TBS” resize datafile ‘TBS02.DBF’ to 100;
更換數據文件路徑
表空間脫機
Alter tablespace tbs offline;
修改數據文件路徑
SQL> alter tablespace tbs rename datafile
‘/dm8/data/DAMENG/TBS01.DBF’ to ‘/dm8/TBS01.DBF’;
表空間聯機
SQL> alter tablespace tbs online;
回滾表空間
alter tablespace “ROLL” add datafile ‘/dm8/data/DAMENG/ROLL02.DBF’
size 32;
alter tablespace “ROLL” resize datafile ‘ROLL02.DBF’ to 128;
臨時表空間
SQL> select para_name,para_value from v$dm_ini where para_name like ‘%TEMP%’;
行號 PARA_NAME PARA_VALUE
1 TEMP_PATH /dm8/data/DAMENG
2 TEMP_SIZE 10
3 TEMP_SPACE_LIMIT 0
system、temp、roll 表空間不允許脫機
刪除表空間
Drop tablespace tbs;
用戶管理
用戶管理分為三塊:用戶、權限、角色
用戶
查看用戶
SQL> select username,account_status from dba_users;
行號 USERNAME ACCOUNT_STATUS
1 SYSSSO OPEN
2 DMHR OPEN
3 SYSDBA OPEN
4 SYS OPEN
5 SYSAUDITOR OPEN
企業版的用戶
數據庫預定義的用戶:
Sysdba :管理員
Sys:不能登錄,數據字典、視圖
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=1+2 7=4+2+1
通過console 工具來更改參數
通過函數sp_set_para_value()
sp_set_para_value(1,‘PWD_POLICY’,3)
COMPATIBLE_MODE 是否兼容其他數據庫模式。0:不兼容,1:兼容SQL92
標準,2:兼容ORACLE,3:兼容MS SQL SERVER,4:兼容MYSQL
兼容ORACLE 模式sp_set_para_value(2,‘COMPATIBLE_MODE’,2)
創建用戶
案例:創建test 用戶,test 用戶屬于test 表空間,test 用戶擁有創建
表、視圖的權限。
1)創建test 表空間
create tablespace “TEST” datafile ‘/dm8/data/DAMENG/TEST01.DBF’ size 32 autoextend on next 1 maxsize 500 CACHE = NORMAL;
2)創建用戶
3)授權
grant CREATE TABLE to “TEST”;
grant CREATE VIEW to “TEST”;
查看被授予的角色和權限
select grantee,granted_role from sys.dba_role_privs
where grantee=‘TEST’;
select * from sys.dba_sys_privs
where grantee=‘TEST’;
對用戶的操作
更改用戶的默認表空間
alter user “TEST” default tablespace “MAIN”;
更改密碼:
Alter user test identified by dameng456;
sysdba 用戶的密碼忘記之后,無法用sysdba 用戶登錄數據庫。
查看用戶的狀態
select username,account_status from dba_users;
鎖定test 用戶
alter user test account lock;
解鎖test 用戶
alter user test account unlock;
撤回權限
revoke create table from test;
刪除用戶:
Drop user test;
角色
一組權限的集合,方便權限管理
角色是可以被授予給角色和用戶
create role “R1”;
grant UPDATE(“MANAGER_ID”) on “DMHR”.“DEPARTMENT” to “R1”;
grant UPDATE(“IDENTITY_CARD”) on “DMHR”.“EMPLOYEE” to “R1” with
grant option;
grant INSERT(“EMPLOYEE_ID”) on “DMHR”.“EMPLOYEE” to “R1”;
grant
INSERT(“DEPARTMENT_ID”),UPDATE(“DEPARTMENT_ID”),REFERENCES("
DEPARTMENT_ID") on “DMHR”.“DEPARTMENT” to “R1”;
模式對象管理
模式就是一組數據對象的集合
模式對象:表、視圖、索引、觸發器、包、序列、存儲過程、同義詞
等
模式與用戶的關系:
創建用戶會自動創建一個與用戶名同名的模式,一個用戶可以對應多
個模式。
表
用戶表:自己創建的表,存放的是真實的用戶數據
系統表:數據庫自己創建的表,里面存放數據庫關鍵性的信息
DM 支持表的類型:
索引組織表、堆表、外部表、分區表
DM 默認表的類型是索引組織表,ORACLE 默認表的類型是堆表
規劃表:
1)命名:以字母開頭,a-z,0-9,$#_
2)數據類型:int,number,date,char,varchar,clob,blob
3)存儲位置:表空間,沒有指定表空間,就存放在用戶默認表空間
中。
4)約束類型:主鍵約束、外鍵約束、非空約束、唯一約束、檢查約
束。
非空約束:
create table test1(id char(10) not null);
insert into test1 values (null);
DM 數據庫執行sql 腳本:
vi /home/dmdba/test1.sql
insert into test1 values (1);
insert into test1 values (2);
insert into test1 values (3);
commit;
SQL> start /home/dmdba/test1.sql
唯一約束:創建唯一約束,會創建一個唯一索引,會忽視空值,NULL 不等于0
SQL> create table test2(id int unique,name varchar(25));
SQL> insert into test2 values(1,‘1111’);
SQL> insert into test2 values(null,‘1111’);
SQL> insert into test2 values(null,‘1111’);
SQL> insert into test2 values(1,‘1111’);
insert into test2 values(1,‘1111’);
已用時間: 00:00:02.341. 執行號:0.
SQL> commit;
主鍵約束:非空+唯一,一個表只能有一個主鍵,設計主鍵盡量的避
開業務邏輯的列
SQL> create table test3(id int primary key);
外鍵約束:
SQL> create table test4 (id int foreign key references test3(id));
SQL> drop table test3;
drop table test3;
第1 行附近出現錯誤[-2639]:試圖刪除被依賴對象[TEST3].
SQL> drop table test4;
已用時間: 127.084(毫秒). 執行號:781.
SQL> drop table test3;
檢查約束
SQL> create table test5(id int check(id>=5));
操作已執行
已用時間: 58.001(毫秒). 執行號:783.
SQL> insert into test5 values(1);
insert into test5 values(1);
[-6604]:違反CHECK 約束[CONS134218846].
SQL> insert into test5 values(5);
SQL> commit;
管理表:
重命名表:
Alter table test1 rename to test6;
增加列:
alter table “TEST1”.“TEST6” add column(“NAME” VARCHAR(30));
刪除列:
Alter table test6 drop column name;
查看約束:
select constraint_name,table_name,status from user_constraints;
啟用約束
alter table test2 enable constraint CONS134218843 ;
禁用約束
alter table test2 disable constraint CONS134218843 ;
刪除表:
Drop table test5;
作業:
創建表test,
所屬表空間為test,表的信息如下:
Id int 主鍵,Name varchar(30) not null,
Address varchar(60),
Phone_number number (20)
更新:update (表名) set 列名=() where ();
刪除:delete from () where ();
視圖
視圖:就是一張虛擬表,一個查詢語句。
DM 視圖:簡單視圖、復制視圖、物化視圖
創建視圖語法: create or replace view () as ***接查詢語句
Create view () as
創建簡單的視圖:
create view test1.emp_v as
select employee_id,employee_name,salary,department_id from
dmhr.employee where department_id=1005;
查詢視圖:
通過manager 工具
也可以查看視圖all_views
刪除視圖:
Drop view emp_v;
索引
索引作用:加快查詢,少量的數據更新,延遲插入,數據庫會自動維護索引,索引會占用存儲空間。
達夢支持的索引:btree 索引,位圖索引,函數索引
創建索引的基本要求:
經常查詢的列
Where 條件中出現的列
連接列
返回少量或部分的數據
不適合建立索引:
1、返回大量的數據
2、列上有大量的重復數據
3、列上有大量的null
創建索引
CREATE INDEX “ind_employee_name” ON
“TEST1”.“TEST_EMP”(“EMPLOYEE_NAME” ASC) STORAGE(ON “TEST”,
CLUSTERBTR) ;
查看索引信息:
select * from user_indexes;
查看sql 執行計劃
SQL> explain select * from test_emp where employee_name=‘aaa’;
更新統計信息
begin
dbms_stats.gather_table_stats(‘TEST1’,’TEST_EMP’);
end;
/
維護索引:
重建索引:提升數據庫的性能
Alter index ind_employee_name rebuild;
刪除索引
drop index “TEST1”.“ind_employee_name”;
注意:不要在業務期間,執行創建、刪除、重建索引,搜集統計信息。
達夢不會自動搜集統計信息,可以配置定時作業搜集。
備份還原
備份就是數據庫在某個一個時間點的副本
數據庫備份的目的:
為了防止天災人禍(地震、火災、人為誤操作,硬件故障等)
備份主要有:物理備份和邏輯備份
物理備份主要備份的是使用有效的數據頁,邏輯備份主要是備份的數
據庫對象。
物理備份:分為聯機備份和脫機備份;完全備份和增量備份。
完全備份:備份指定的數據庫或者表空間的全部數據。
增量備份:是指在一次全備或增備后,以后每次的備份只需要備份與
前一次相比增加或者被修改的數據頁。
備份的介質:磁盤、磁帶
物理備份
冷備:不需要開啟歸檔,針對整庫做備份
需要開啟dmap 服務,需要關閉數據庫
[dmdba@localhost bin]$ ./DmAPService status
DmAPService (pid 14437) is running.
console 工具備份
DmServiceDMSERVER stop
/dm8/data/DAMENG/dm.ini
/dm8/data/DAMENG/backup
用dmrman 工具備份只支持冷備
cd /dm8/bin
./dmrman
RMAN> backup database ‘/dm8/data/DAMENG/dm.ini’ backupset
‘/dm8/backup’;
檢查備份集
RMAN> check backupset ‘/dm8/backup’;
熱備:
需要開啟歸檔,數據庫需要聯機
可以備份數據庫、表空間、表、歸檔日志文件
查看數據庫歸檔模式:
SQL> select arch_mode from v$database;
利用manager 工具做熱備
整庫備份
增量備份:
Disql 工具:
整庫備份:
backup database full to “full02” backupset ‘/dm8/backup/rb’;
增量備份:
backup database increment base on backupset ‘/dm8/backup/rb’ to
“DB_DAMENG_INCRE_2020_09_09_15_43_36” backupset
‘DB_DAMENG_INCRE_2020_09_09_15_43_36’;
管理工具中沒有發現備份:
手動指定工作目錄
表空間備份:
backup tablespace “DMHR” full to
“TS_DMHR_FULL_2020_09_09_15_47_26” backupset
‘TS_DMHR_FULL_2020_09_09_15_47_26’;
表備份:
backup table “DMHR”.“EMPLOYEE” to
“TAB_DMHR_EMPLOYEE_2020_09_09_15_50_23” backupset
‘TAB_DMHR_EMPLOYEE_2020_09_09_15_50_23’;
歸檔日志備份:
backup archivelog all to “ARCH_2020_09_09_15_51_32” backupset
‘ARCH_2020_09_09_15_51_32’;
物理還原:
檢查備份集
整庫還原:
restore database ‘/dm8/data/DAMENG/dm.ini’ from backupset
‘/dm8/backup’;
recover database ‘/dm8/data/DAMENG/dm.ini’ with archivedir
‘/dm8/arch’;
recover database ‘/dm8/data/DAMENG/dm.ini’ update db_magic;
表空間還原
表空間只能在聯機模式下進行備份,脫機模式進行還原
restore database ‘/dm8/data/DAMENG/dm.ini’ tablespace DMHR from
backupset ‘/dm8/backup’;
recover database ‘/dm8/data/DAMENG/dm.ini’ tablespace DMHR;
邏輯備份
Dexp/dimp
庫級別
用戶
模式
表
/dm8/bin
./dexp help
邏輯導出:
全庫導出:
[dmdba@localhost bin]$ ./dexp sysdba/dameng123 file=full.dmp log=full.log directory=/dm8/backup full=y
[dmdba@localhost bin]$ ./dimp sysdba/dameng123 file=full.dmp log=full_imp.log directory=/dm8/backup full=y
用戶導出:
[dmdba@localhost bin]$ ./dexp sysdba/dameng123 file=test1.dmp log=test1.log directory=/dm8/backup owner=test1
導出表:
[dmdba@localhost bin]$ ./dexp test1/dameng123 file=test_emp.dmp directory=/dm8/backup tables=test_emp
作業
新建作業1,每周三,每周日22:00 做全備
1.manager中創建代理環境
2.新建作業
ddl語句:
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/bak’, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘job1’, ‘h1’, 1, 2, 1, 8, 0, ‘22:00:00’, NULL, ‘2020-09-14 06:21:42’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘job1’);
新建作業2,每周一、二、四、五、六22:00 做增備
ddl語句:
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’, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘job2’, ‘h2’, 1, 2, 1, 118, 0, ‘22:00:00’, NULL, ‘2020-09-14 06:26:17’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘job2’);
DM8 開發
JDBC:
把驅動放到 Eclipse Standard/SDK ,對應的測試程序的 lib 目錄
檢查 JAVA build path,如未發現驅動,要增加到 lib 庫中。
設置連接方式:
private static String url =
“jdbc:dm://192.168.10.65:5236”;
oracle配置的時候要帶實例名
設置用戶名:
private static String username = “SYSDBA”;
設置密碼:
private static String password = “SYSDBA”;
Linux 環境配置odbc
用root 配置
Linux:rpm 包安裝
[root@localhost Packages]# rpm -qa|grep unixODBC
unixODBC-devel
安裝:[root@localhost Packages]# rpm -ivh unixODBC-2.3.1-
10.el7.x86_64.rpm
[root@localhost Packages]# rpm -ivh unixODBC-devel-2.3.1-
10.el7.x86_64.rpm
卸載:[root@localhost etc]# rpm -e unixODBC-devel
[root@localhost etc]# rpm -e unixODBC
源碼安裝:條件安裝 gcc
[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
[root@localhost unixODBC-2.3.0]# make install
[root@localhost unixODBC-2.3.0]# odbcinst -j
配置/usr/local/etc/odbc.ini /usr/local/etc/odbcinst.ini
vi /usr/local/etc/odbc.ini
[dm8]
Description = DM ODBC DSND
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = dameng123
TCP_PORT = 5236
vi /usr/local/etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
DRIVER = /dm8/bin/libdodbc.so
修改文件權限:
chmod 775 /usr/local/etc/odbc.ini
chmod 775 /usr/local/etc/odbcinst.ini
測試連接
用dmdba 賬戶
isql dm8
總結
以上是生活随笔為你收集整理的达梦8 DCA认证笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PS工具的导入与安装
- 下一篇: 服务器安装配置elasticsearch