達夢DCA培訓筆記

根據達夢DCA培訓的講師筆記,自己跟着做了一遍並整理。

1、達夢數據庫的安裝

1.1 收集軟件信息

// 操作系統
[root@localhost ~]# cat /etc/issue
NeoKylin Linux General Server release 6.0  (Dhaulagiri) 
Kernel \r on an \m
// Linux內核
[root@localhost ~]# uname -r
2.6.32-220.el6.x86_64

1.2 收集硬件信息

// CPU信息
[root@localhost ~]# cat /proc/cpuinfo
// 磁盤信息
[root@localhost ~]# fdisk -l
[root@localhost ~]# df -h

1.3 規劃安裝路徑(軟件,數據庫文件)

[root@localhost ~]# mkdir /dm7

1.4 規劃用戶(不建議使用root,創建dmdba用戶)

// 查看dmdba用戶是否存在
[root@localhost ~]# id dmdba
id: dmdba:無此用戶
You have mail in /var/spool/mail/root
// 創建用戶組
[root@localhost ~]# groupadd dinstall
You have new mail in /var/spool/mail/root
// 創建dmdba並指定用戶組
[root@localhost ~]# useradd -g dinstall dmdba
// 校驗用戶是否創建成功
[root@localhost ~]# id dmdba
uid=500(dmdba) gid=501(dinstall)=501(dinstall)
// 給用戶設置密碼(我這裏是dm123456)
[root@localhost ~]# passwd dmdba

// 修改安裝路徑的權限
[root@localhost /]# ll -dl /dm7
drwxr-xr-x 2 root root 4096 10月 26 11:07 /dm7
[root@localhost /]# chown dmdba.dinstall -R /dm7
[root@localhost /]# ll -dl /dm7
drwxr-xr-x 2 dmdba dinstall 4096 10月 26 11:07 /dm7

1.5 配置環境變量(可選項,方便實用達夢命令)

[root@localhost /]# cd /home/dmdba
[root@localhost dmdba]# vi .bash_profile 
// 在.bash_profile最後增加
export DM_HOME=/dm7
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
// 驗證是否配置成功
[root@localhost dmdba]# source .bash_profile 
[root@localhost dmdba]# echo $DM_HOME
/dm7

1.6 配置文件最大打開數量

[root@localhost dmdba]# vi /etc/security/limits.conf
// 在最後增加
dmdba soft nofile 4096
dmdba hard nofile 65536
// 查看配置(需要重啓)
[root@localhost dmdba]# ulimit -a

1.7 準備安裝包(使用winscp等軟件把安裝包放入/installdoc目錄)

[root@localhost /]# mkdir /installdoc
[root@localhost /]# cd /installdoc/
[root@localhost installdoc]# ls -l
總用量 575428
-rw-r--r-- 1 root root 589234176 10月 14 10:51 dm7_setup_rh6_64_ent_7.6.0.197_20190917.iso
// 掛載
[root@localhost installdoc]# mount -o loop dm7_setup_rh6_64_ent_7.6.0.197_20190917.iso  /mnt
[root@localhost installdoc]# cd /mnt/
[root@localhost mnt]# ls -l
總用量 575058
-r-xr-xr-x 1 root root 584382798  9月 16 11:04 DMInstall.bin
-r-xr-xr-x 1 root root   2266249  9月 12 16:45 DM_Install_en.pdf
-r-xr-xr-x 1 root root   2207674  9月 12 16:45 DM_Install_zh.pdf
-r-xr-xr-x 1 root root       868  9月 12 16:48 release_en.txt
-r-xr-xr-x 1 root root       973  9月 12 16:48 release_zh.txt

1.8 達夢數據庫安裝

[root@localhost mnt]# export DISPLAY=:0.0
[root@localhost mnt]# xhost +
access control disabled, clients can connect from any host
[root@localhost mnt]# su - dmdba
[dmdba@localhost mnt]$ ./DMInstall.bin 
解壓安裝程序......... 

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

[root@localhost ~]# /dm7/script/root/root_installer.sh 
移動 /dm7/bin/dm_svc.conf 到/etc目錄
修改服務器權限
創建DmAPService服務
移動服務腳本文件(/dm7/bin/DmAPService 到 /etc/rc.d/init.d/DmAPService)
創建服務(DmAPService)完成
啓動DmAPService服務
Starting DmAPService:                                      [ OK ]

在這裏插入圖片描述

1.9 卸載軟件

// 已經存在數據庫的需要先停止數據庫,執行uninstall.sh
// 不存在數據庫的可以直接執行uninstall.sh

1.10 創建數據庫

  • dmint

    // 注:這裏創建的SYSDBA的默認密碼是SYSDBA
    [dmdba@localhost bin]$ ./dminit path=/dm7/data/ db_name=DM01 instance_name=TEST1 port_num=5237
    initdb V7.6.0.197-Build(2019.09.12-112648)ENT 
    db version: 0x7000a
    file dm.key not found, use default license!
    License will expire on 2020-09-12
    
     log file path: /dm7/data/DM01/DM0101.log
    
    
     log file path: /dm7/data/DM01/DM0102.log
    
    write to dir [/dm7/data/DM01].
    create dm database success. 2019-10-26 13:34:40
    // 使用root用戶執行
    [root@localhost ~]# /dm7/script/root/dm_service_installer.sh -t dmserver -p TEST1 -i /dm7/data/DM01/dm.ini
    移動服務腳本文件(/dm7/bin/DmServiceTEST1 到 /etc/rc.d/init.d/DmServiceTEST1)
    創建服務(DmServiceTEST1)完成
    
  • dbca.sh(數據庫配置助手)

    [dmdba@localhost dm7]$ dbca.sh
    2019-10-26 13:14:53 [com.dameng.dbca.Startup]
    [INFO] 啓動DBCA
    

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

[root@localhost ~]# /dm7/script/root/dm_service_installer.sh -s /dm7/bin/DmServiceDMSERVER 
移動服務腳本文件(/dm7/bin/DmServiceDMSERVER 到 /etc/rc.d/init.d/DmServiceDMSERVER)
創建服務(DmServiceDMSERVER)完成

在這裏插入圖片描述

1.11 連接數據庫

  • bin目錄下disql

    [dmdba@localhost bin]$ disql sysdba/dameng123
    
    服務器[LOCALHOST:5236]:處於普通打開狀態
    登錄使用時間: 21.114(毫秒)
    disql V7.6.0.197-Build(2019.09.12-112648)ENT 
    SQL> select * from v$instance;
    
    [dmdba@localhost bin]$ disql SYSDBA/SYSDBA:5237
    
  • tool目錄下manager

    [dmdba@localhost tool]$ ./manager
    

在這裏插入圖片描述

2、數據庫的實例管理

2.1 數據庫的狀態

  • shutdown:關閉
  • mount:配置模式
  • open:打開
  • suspend:掛起

2.2 狀態切換

  • shutdown ==> mount
    shutdown ==> open
    mount ==> open
    open ==> mount
    open ==> shutdown
    open ==> suspend
    suspend ==> open

2.3 啓動過程

1.shutdown ==> mount

​ 分配共享內存,啓動後臺的進程或者進程,打開控制文件

2.mount ==> open

​ 根據控制文件,打開所有的數據文件和重做日誌文件

// 使用腳本啓動服務
// LINUX6
# service DmServiceTEST1 start/stop/restart
// LINUX7
# systemctl start/stop/restart DmServiceTEST1

2.4 數據庫的狀態切換

// 數據庫狀態查看
SQL> select status$ from v$instance;
// open到mount
SQL> alter database mount;
// mount 狀態到open
SQL> alter database open;

3、DM7的體系結構

實例:共享內存+後臺的進程或線程

數據庫:存放到磁盤的文件

一般是一個數據庫對應一個實例,但是DSC(DM共享集羣)是多個實例對應一個數據庫

達夢的服務器組成:客戶端+服務器(實例+數據庫)

客戶端不能直接去訪問數據庫,客戶端把請求交給實例,實例去訪問數據庫,數據庫把訪問信息返還給實例,實例再交給客戶端

在這裏插入圖片描述

3.1 DM邏輯結構

  • 數據庫由一個或多個表空間組成
  • 每個表空間由一個或多個數據文件組成
  • 每個數據文件由一個或多個簇組成
  • 頁是數據庫中最小的分配單位,也是數據庫中使用的最小的IO單元

3.2 DM物理存儲結構

  • 配置文件:dm.ini,dmarch.ini

  • 控制文件:dm.ctl,ctl_bak_path,ctl_bak_num

    SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_PATH';
    行號     PARA_NAME    PARA_VALUE              
    ---------- ------------ ------------------------
    1          CTL_BAK_PATH /dm7/data/DAMENG/ctl_bak
    
    SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_NUM'; 
    行號     PARA_NAME   PARA_VALUE
    ---------- ----------- ----------
    1          CTL_BAK_NUM 10
    
  • 數據文件:數據文件以dbf爲擴展名

    SQL> select file_name,tablespace_name from dba_data_files;
    行號     FILE_NAME                   TABLESPACE_NAME
    ---------- --------------------------- ---------------
    1          /dm7/data/DAMENG/SYSTEM.DBF SYSTEM
    2          /dm7/data/DAMENG/DMHR.DBF   DMHR
    3          /dm7/data/DAMENG/MAIN.DBF   MAIN
    4          /dm7/data/DAMENG/TEMP.DBF   TEMP
    5          /dm7/data/DAMENG/ROLL.DBF   ROLL
    
  • 重做日誌文件:重做日誌文件又叫redo日誌,主要用於數據庫的備份和恢復

  • 歸檔文件:利用歸檔日誌,系統可被恢復至故障發生的前一刻,也可以還原到指定的時間點,如果沒有歸檔日誌文件,則只能利用備份進行恢復。

  • 邏輯日誌文件

  • 備份文件:以bak爲擴展名的文件

  • 日誌文件:跟蹤日誌,事件日誌

3.3 DM的內存結構

3.3.1 共享內存

// 總空間查詢:0表示不限制

SQL> select para_name,para_value from v$dm_ini where para_name='MEMORY_TARGET';
行號     PARA_NAME     PARA_VALUE
---------- ------------- ----------
1          MEMORY_TARGET 0

// 系統內存池大小(減少系統調用)

SQL> select para_name,para_value from v$dm_ini where para_name='MEMORY_POOL';          

行號     PARA_NAME   PARA_VALUE
---------- ----------- ----------
1          MEMORY_POOL 200
3.3.2 數據緩衝區:buffer

在這裏插入圖片描述

存放的內容:LRU(最小使用算法)鏈表

狀態:free,dirty,clean,pending

如何去設置buffer的大小

// 查看大小
SQL> select para_name,para_value from v$dm_ini where para_name='BUFFER';
行號     PARA_NAME PARA_VALUE
---------- --------- ----------
1          BUFFER    100
// 查看最大值
SQL> select para_name,para_value from v$dm_ini where para_name='MAX_BUFFER';
行號     PARA_NAME  PARA_VALUE
---------- ---------- ----------
1          MAX_BUFFER 100
// 建議:
OLTP:BUFFER大小設置爲整個物理內存的40-60%
OLAP:BUFFER大小設置爲整個物理內存的60-80%
// 查看參數類型:IN FILE,靜態參數
select name,type from v$parameter where name='BUFFER';
行號     NAME   TYPE   
---------- ------ -------
1          BUFFER IN FILE
// 修改參數
// 1:修改配置文件和內存;2:只配置文件,需要重啓服務後生效
SQL> sp_set_para_value(2,'BUFFER',64); 
SQL> select para_name,para_value from v$dm_ini where para_name='BUFFER';
行號     PARA_NAME PARA_VALUE
---------- --------- ----------
1          BUFFER    64

達夢的參數類型

  • sys/session:動態參數,要同時修改內存和配置文件
  • read only:數據庫運行狀態下是不能修改的,在mount狀態修改
  • in file:靜態參數,修改配置文件即可,生效需要重啓服務

recycle:快速回收池

select para_name,para_value from v$dm_ini where para_name='RECYCLE';

行號     PARA_NAME PARA_VALUE
---------- --------- ----------
1          RECYCLE   64

keep:保留池

SQL> select para_name,para_value from v$dm_ini where para_name='KEEP';

行號     PARA_NAME PARA_VALUE
---------- --------- ----------
1          KEEP      8
3.3.3 字典緩衝區
SQL> select para_name,para_value from v$dm_ini where para_name like '%DICT%';
行號     PARA_NAME               PARA_VALUE
---------- ----------------------- ----------
1          DICT_BUF_SIZE           5
2          PLN_DICT_HASH_THRESHOLD 20
// DICT_BUF_SIZE:字典緩衝區的大小
// PLN_DICT_HASH_THRESHOLD:關聯登記
	當cache_pool_size的值大於等於該值的時候,記錄執行計劃中關聯的數據字典。
3.3.4 sql緩衝區

分析:一條sql的執行過程?Select id,name from abc where id=1;

  1. 語法分析
  2. 語義分析(存放數據的數據字典表,產生物理讀)
  3. 權限判斷
  4. 查找數據塊是否內存(在內存,邏輯讀,不在內存,把數據塊從磁盤讀到buffer)
  5. 找是否有可用的執行計劃。有的直接按照執行計劃把結果展示出來。如果沒有,生成執行計劃,再把數據展示出來

Sql緩衝區中存放的是:最近使用的sql,DMSQL代碼,執行計劃和最近查詢的結果集,減少硬解析

SQL> select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';

行號     PARA_NAME       PARA_VALUE
---------- --------------- ----------
1          CACHE_POOL_SIZE 20
3.3.5 日誌緩衝區

改變數據塊信息

update/delete的時候

達夢:每3s寫一次或是commit

SQL> select para_name,para_value from v$dm_ini where para_name like '%RLOG%';
行號     PARA_NAME                PARA_VALUE
---------- ------------------------ ----------
1          CKPT_RLOG_SIZE           100
2          RLOG_CRC                 0
3          RLOG_BUF_SIZE            512
4          RLOG_POOL_SIZE           128
5          RLOG_PARALLEL_ENABLE     0
6          RLOG_APPEND_LOGIC        0
7          RLOG_APPEND_SYSTAB_LOGIC 0
8          RLOG_RESERVE_SIZE        40960
9          RLOG_CHECK_SPACE         1
10         RLOG_SAFE_SPACE          128
11         RLOG_SAFE_PERCENT        25
12         RLOG_SEND_APPLY_MON 	    64
13         RLOG_CRC_IN_RFIL         1
// RLOG_BUF_SIZE:日誌緩衝區大小 單位:page 設置成2的冪次方
// RLOG_POOL_SIZE:最大日誌緩衝區大小 單位:M
3.3.6 排序區
// 對數據進行排序,如果內存排序無法完成,把部分排序轉到磁盤(temp)
SQL> select para_name,para_value from v$dm_ini where para_name like '%SORT%';

行號     PARA_NAME            PARA_VALUE
---------- -------------------- ----------
1          SORT_BUF_SIZE        2
2          SORT_BLK_SIZE        1
3          SORT_BUF_GLOBAL_SIZE 1000
4          SORT_FLAG            0
5          SORT_OPT_SIZE        0
6          BASE_SORT_CPU        36000
7          LARGE_SORT_CPU       40000
8          SMALL_SORT_CPU       200
// SORT_BUF_SIZE ---大小,值要結合自身的業務。
3.3.7 HASH區
SQL> select para_name,para_value from v$dm_ini where para_name like '%HJ%';

行號     PARA_NAME          PARA_VALUE
---------- ------------------ ----------
1          HJ_BUF_GLOBAL_SIZE 500
2          HJ_BUF_SIZE        50
3          HJ_BLK_SIZE        1
// HJ_BUF_SIZE
3.3.8 重做日誌文件的管理
  • 查看日誌文件

    SQL> select path, rlog_size from v$rlogfile;
    行號     PATH                          RLOG_SIZE           
    ---------- ----------------------------- --------------------
    1          /dm7/data/DAMENG/DAMENG01.log 536870912
    2          /dm7/data/DAMENG/DAMENG02.log 536870912
    3          /dm7/data/DAMENG/DAMENG03.log 536870912
    
  • 增加一個日誌文件

    SQL> alter database add logfile '/dm7/data/DAMENG/DAMENG04.log' size 512;
    操作已執行
    
    SQL> select path, rlog_size from v$rlogfile;
    行號     PATH                          RLOG_SIZE           
    ---------- ----------------------------- --------------------
    1          /dm7/data/DAMENG/DAMENG01.log 536870912
    2          /dm7/data/DAMENG/DAMENG02.log 536870912
    3          /dm7/data/DAMENG/DAMENG03.log 536870912
    4          /dm7/data/DAMENG/DAMENG04.log 536870912
    
  • 修改日誌文件的大小

    SQL> alter database resize logfile '/dm7/data/DAMNEG/DAMENG04.log' to 1024;
    
  • 注:生產環境中建議所有日誌文件的大小要一致

4、表空間管理

4.1 達夢表空間介紹

// 達夢表空間有哪些?
SQL> select tablespace_name from dba_tablespaces;
行號     TABLESPACE_NAME
---------- ---------------
1          SYSTEM
2          ROLL
3          TEMP
4          MAIN
5          DMHR
6          HMAIN
// SYSTEM:數據字典和全局的系統數據
// ROLL:存放了數據庫運行過程中產生的回滾記錄
	UNDO_RETENTION: 單位是秒。
   	sp_set_para_double_value(2,’UNDO_RETENTION’,2400)
// TEMP:臨時表空間,臨時字段,臨時表都默認存放在臨時表控件
// MAIN:數據庫默認的一個表空間,創建數據對象時,如果不指定存儲位置,默認存放到該表空間
// HMAIN:huge表空間

4.2 如何去規劃表空間及相關案例

  • 案例1:創建一個表空間

    SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1_01.dbf' size 32;                   
    // 表空間初始文件大小是頁大小的4096倍
    
  • 案例2:創建一個表空間,初始大小是50M,最大100M

    SQL> create tablespace tbs2 datafile '/dm7/data/DAMENG/tbs2_01.dbf' size 50 autoextend on maxsize 100;
    
  • 案例3:創建一個表空間,初始值50M,每次擴展1M,最大100M

    SQL> create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3_01.dbf' size 50 autoextend on next 1 maxsize 100;
    
  • 案例4:創建一個表空間,初始50M,表空間由2個數據文件組成,分別存儲到不同的磁盤上,每次擴展1M,每個數據文件最大100M

    SQL> create tablespace tbs4 datafile '/dm7/data/DAMENG/tbs4_01.dbf' size 50 autoextend on next 1 maxsize 100, '/dm7/data/tbs4_02.dbf' size 50 autoextend on next 1 maxsize 100;
    

4.3 維護表空間

表空間不足的時候,如何去維護表空間

  • 創建大表空間,數據導出,導入

  • resize數據文件大小

  • 增加數據文件

    SQL> alter tablespace tbs2 add datafile '/dm7/data/DAMENG/tbs2_02.dbf' size 50 autoextend on maxsize 100;
    // 查看錶空間
    SQL> select file_name,tablespace_name from dba_data_files;
    行號     FILE_NAME                    TABLESPACE_NAME
    ---------- ---------------------------- ---------------
    1          /dm7/data/DAMENG/SYSTEM.DBF  SYSTEM
    2          /dm7/data/tbs4_02.dbf        TBS4
    3          /dm7/data/DAMENG/tbs4_01.dbf TBS4
    4          /dm7/data/DAMENG/tbs3_01.dbf TBS3
    5          /dm7/data/DAMENG/tbs2_02.dbf TBS2
    6          /dm7/data/DAMENG/tbs2_01.dbf TBS2
    7          /dm7/data/DAMENG/tbs1_01.dbf TBS1
    8          /dm7/data/DAMENG/DMHR.DBF    DMHR
    9          /dm7/data/DAMENG/MAIN.DBF    MAIN
    10         /dm7/data/DAMENG/TEMP.DBF    TEMP
    11         /dm7/data/DAMENG/ROLL.DBF    ROLL
    
  • 更換存儲位置:

    // 達夢的表空間狀態:0-online;1-offline
    // 注意:SYSTEM,ROLL,TEMP不能是offline
    SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces;
    行號     TABLESPACE_NAME STATUS     
    ---------- --------------- -----------
    1          SYSTEM          0
    2          ROLL            0
    3          TEMP            0
    4          MAIN            0
    5          DMHR            0
    6          TBS1            0
    7          TBS2            0
    8          TBS3            0
    9          TBS4            0
    10         HMAIN           NULL
    // 更改TBS1的存儲位置
    a.表空間offline
    SQL> alter tablespace tbs1 offline;
    b.修改存儲位置
    SQL> alter tablespace tbs1 rename datafile '/dm7/data/DAMENG/tbs1_01.dbf' to '/dm7/data/tbs1_01.dbf';
    c.表空間online
    SQL> alter tablespace tbs1 online;
    

4.4 刪除表空間

SQL> drop tablespace tbs2;
// 如果表空間存在數據,不允許直接刪除

5、用戶管理

5.1 達夢數據庫有哪些用戶

SQL> select username from dba_users;
行號     USERNAME  
---------- ----------
1          SYSSSO
2          DMHR
3          SYSDBA
4          SYS
5          SYSAUDITOR
// SYS:達夢數據庫內置管理員用戶,不能登錄數據庫,數據庫使用的大部分的數據字典和動態性能視圖sys
// SYSDBA:數據庫的管理員
// SYSAUDITOR:審計用戶
// SYSSSO:安全用戶
// SYSDBO:數據操作員(安全版才存在)
// 如何規劃用戶?
	名字:字母開頭,a-z,0-9,$#_
	位置:表空間的位置

5.2 口令策略

用戶密碼最長爲48個字節,創建用戶時使用password policy字句來指定口令策略。dm.ini中有PWD_POLICY

系統的口令策略:

  • 0:無策略
  • 1:禁止與用戶名相同
  • 2:口令長度不小於9
  • 4:至少包含一個大寫字母(A-Z)
  • 8:至少包含一個數字(0-9)
  • 16:至少包含一個標點符號(英文狀態下輸入,除’'和空格)

口令策略可以單獨使用,也可以組合使用,比如:需要應用策略4和8,那麼設置口令策略爲4+8=12

// 查看數據庫密碼策略
SQL> select para_name,para_value from v$dm_ini where para_name='PWD_POLICY';
行號     PARA_NAME  PARA_VALUE
---------- ---------- ----------
1          PWD_POLICY 2
// 密碼策略設置爲6
SQL> sp_set_para_value(1,'PWD_POLICY',6);
DMSQL 過程已成功完成
已用時間: 10.577(毫秒). 執行號:43.
// 再次查看數據庫密碼策略
SQL> select para_name,para_value from v$dm_ini where para_name='PWD_POLICY';
行號     PARA_NAME  PARA_VALUE
---------- ---------- ----------
1          PWD_POLICY 6

密碼嘗試登錄次數:FAILED_LOGIN_ATTEMPS

密碼鎖定時間:PASSWORD_LOCK_TIME

密碼過期時間:PASSWORD_LIFE_TIME

SQL> select b.username, a.failed_num, a.failed_attemps from sysusers a right join all_users b on a.id=b.user_id;
行號     USERNAME   FAILED_NUM  FAILED_ATTEMPS
---------- ---------- ----------- --------------
1          SYSDBA     0           0
2          SYS        0           0
3          SYSAUDITOR 0           0
4          SYSSSO     0           0
5          DMHR       3           0

5.3 策略案例分析

  • 案例1:

    爲數據庫設置一個用戶,該賬戶可以創建自己的表,有屬於自己的獨立表空間,用戶的密碼要求每60天變更一次

    // 創建一個表空間
    SQL> create tablespace test datafile '/dm7/data/DAMENG/test01.dbf' size 32;
    // 創建用戶,指定密碼,表空間和密碼過期時間
    SQL> create user test identified by Dameng123 limit password_life_time 60 default tablespace test;
    // 校驗是否創建成功
    [dmdba@localhost ~]$ disql test/Dameng123
    SQL> select user;
    行號     USER()
    ---------- ------
    1          TEST
    // 根據下面的知識,創建用戶默認是public角色,沒有創建表權限,這裏需要給用戶賦予此權限
    SQL> grant create table to test;
    

5.4 規劃用戶權限

系統權限:create drop alter 能夠對數據庫做什麼操作。
對象權限: (表,視圖,過程等等)select ,delete,update,insert

5.5 案例分析

  • 案例1:

    // 查看角色
    SQL> select role from dba_roles;
    行號     ROLE            
    ---------- ----------------
    1          DBA
    2          DB_AUDIT_ADMIN
    3          DB_AUDIT_OPER
    4          DB_AUDIT_PUBLIC
    5          DB_POLICY_ADMIN
    6          DB_POLICY_OPER
    7          DB_POLICY_PUBLIC
    8          PUBLIC
    9          RESOURCE
    10         SYS_ADMIN
    // 查看用戶角色
    SQL> select grantee,granted_role from dba_role_privs where grantee='TEST';
    行號     GRANTEE GRANTED_ROLE
    ---------- ------- ------------
    1          TEST    PUBLIC
    // 查看角色權限
    SQL> select grantee,privilege from dba_sys_privs where grantee='PUBLIC';
    行號     GRANTEE PRIVILEGE       
    ---------- ------- ----------------
    1          PUBLIC  INSERT TABLE
    2          PUBLIC  UPDATE TABLE
    3          PUBLIC  DELETE TABLE
    4          PUBLIC  SELECT TABLE
    5          PUBLIC  REFERENCES TABLE
    6          PUBLIC  GRANT TABLE
    7          PUBLIC  INSERT VIEW
    8          PUBLIC  UPDATE VIEW
    9          PUBLIC  DELETE VIEW
    10         PUBLIC  SELECT VIEW
    11         PUBLIC  GRANT VIEW
    12         PUBLIC  EXECUTE PROCEDURE
    13         PUBLIC  GRANT PROCEDURE
    14         PUBLIC  SELECT SEQUENCE
    15         PUBLIC  GRANT SEQUENCE
    16         PUBLIC  EXECUTE PACKAGE
    17         PUBLIC  GRANT PACKAGE
    18         PUBLIC  SELECT ANY DICTIONARY
    19         PUBLIC  SELECT MATERIALIZED VIEW
    20         PUBLIC  GRANT DOMAIN
    21         PUBLIC  USAGE DOMAIN
    22         PUBLIC  DUMP TABLE
    
  • 案例2:

    規劃一個賬號每60天變更一次密碼,密碼嘗試連接2次失敗,賬號鎖定5分鐘,用戶還可以查詢dmhr.employee表

    // 創建用戶
    SQL> create user test1 identified by Test12345 limit password_life_time 60,failed_login_attemps 2,password_lock_time 5;
    // 解鎖用戶
    SQL> alter user test1 account unlock;
    // 賦予權限
    SQL> grant select on dmhr.employee to test1;
    

    注:一般情況,創建完用戶,給resource角色,就基本上可以滿足需求。具體需要根據生產環境的來。

  • 案例3:

    企業招聘一個錄入信息人員,權限是固定的,只能錄入city表。

    角色:一類權限的集合。把某些特定的權限給一個固定的角色,然後再把角色給用戶

    // 創建角色
    SQL> create role r1; 
    // 賦予權限給角色
    SQL> grant insert on dmhr.city to r1;
    // 創建用戶
    SQL> create user test2 identified by Dameng123;
    // 賦予角色給用戶
    SQL> grant r1 to test2;
    SQL> desc dmhr.city;
    行號     NAME      TYPE$       NULLABLE
    ---------- --------- ----------- --------
    1          CITY_ID   CHAR(3)     N
    2          CITY_NAME VARCHAR(40) Y
    3          REGION_ID INTEGER     Y
    // 使用創建的用戶登錄
    SQL> conn test2/Dameng123;
    // 測試插入語句(由於這裏存在外鍵約束,所以數據無法插入成功,不過權限已經賦予了)
    SQL> insert into dmhr.city(city_id,city_name,region_id) values ('WX','無錫',8);
    

5.6 用戶維護

// 刪除權限
SQL> revoke insert on dmhr.ctiy form r1;
// 修改密碼
SQL> alter user test2 identified by Dameng12345;
// 鎖定/解鎖賬戶
SQL> alter user test2 account lock/unlock;
// 刪除賬號
SQL> drop user test2;
// 刪除賬號(用戶下有創建表),慎用!刪除前記得做備份
SQL> drop user test2 cascade;
// 刪除角色
SQL> drop role r1;

6、DMSQL(SELECT)

SQL:結構化查詢語句

  • DDL:定義語句 create、drop、alter、truncate
  • DML:管理語句 select、update、delete,insert
  • DCL:控制語句 grant、revoke
  • TCL:事務控制 commit、rollback

6.1 簡單查詢

// 語法:select () from ()
// 第一個括號:*,column_name,alias,expr,||,distinct
// 第二個括號:table_name
SQL> select * from dmhr.city;
SQL> select city_id,city_name from dmhr.city;
SQL> select employee_name,salary as tol from dmhr.employee limit 10;
SQL> select employee_name,salary+1000 from dmhr.employee limit 10;
SQL> select employee_name||'的工資是:'||salary as desc1 from dmhr.employee limit 2;
行號     DESC1                        
---------- -----------------------------
1          馬學銘的工資是:30000
2          程擎武的工資是:9000
SQL> select distinct department_id from dmhr.employee;

6.2 過濾查詢

// 語法:select () from () where ();
// 第一個括號:*, column_name,alias, expr,||, distinct
// 第二個括號:table_name
// 第三個括號:過濾條件
// 比較查詢:=,!=,>,>=,<,<=
SQL> select employee_name,salary from dmhr.employee where salary >= 25000;
行號     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          馬學銘     30000
2          蘇國華     30000
3          鄭曉同     30000
// 邏輯運算:and,or
SQL> select employee_name,salary from dmhr.employee where employee_name='馬學銘';
行號     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          馬學銘     30000
SQL> select employee_name,salary from dmhr.employee where employee_name='馬學銘' or employee_name='蘇國華';
行號     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          馬學銘     30000
2          蘇國華     30000
// 模糊查詢:like %匹配0個或多個字符;_匹配1個字符
SQL> select employee_name,salary from dmhr.employee where employee_name like '王%' limit 2;
行號     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          王嶽蓀     5000
2          王金玉     3133
SQL> select employee_name,salary from dmhr.employee where employee_name like '王_' limit 2;
行號     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          王輝        9685
2          王欣        9755
// is null,is not null
SQL> select employee_name,commission_pct from dmhr.employee where commission_pct is not null limit 2; 
行號     EMPLOYEE_NAME COMMISSION_PCT
---------- ------------- --------------
1          馬學銘     0
2          程擎武     0
// in 枚舉
SQL> select employee_name,salary from dmhr.employee where employee_name in ('陳仙','鄭吉羣','馬學銘','程擎武');
行號     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          馬學銘     30000
2          程擎武     9000
3          鄭吉羣     15000
4          陳仙        12000
// between...and
SQL> select employee_name,salary from dmhr.employee where salary between 20000 and 30000;
行號     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          馬學銘     30000
2          蘇國華     30000
3          鄭曉同     30000
// 排序
SQL> select employee_name,salary from dmhr.employee order by salary desc;

6.3 多表查詢

// 語法:select () from () join() on ().
// 第三個括號:表名
// 第四個括號:關聯字段
// 內連接 自然連接
SQL> select e.employee_name,d.department_name from dmhr.employee e natural join dmhr.department d limit 2; 
行號     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          馬學銘     總經理辦
2          林子程     技術支持部
SQL> select e.employee_name,d.department_name from dmhr.employee e join dmhr.department d using(department_id) limit 2;  
行號     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          馬學銘     總經理辦
2          程擎武     行政部
SQL> select e.employee_name,d.department_name from dmhr.employee e join dmhr.department d on e.department_id=d.department_id limit 2; 
行號     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          馬學銘     總經理辦
2          程擎武     行政部

6.4 外連接

// 外連接-左外連接:把寫在left join左邊的全部顯示,右邊的只顯示滿足條件的,不滿足條件的用Null代替。
SQL> select e.employee_name,d.department_name from dmhr.employee e left join dmhr.department d on e.department_id=d.department_id limit 2; 
行號     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          馬學銘     總經理辦
2          程擎武     行政部
// 外連接-右外連接:把寫在right join右邊的全部顯示,左邊的只顯示滿足條件的,不滿足條件的用Null代替。
SQL> select e.employee_name,d.department_name from dmhr.employee e right join dmhr.department d on e.department_id=d.department_id limit 2; 
行號     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          馬學銘     總經理辦
2          陳辰        總經理辦
// 外連接-全外連接
SQL> select e.employee_name,d.department_name from dmhr.employee e full join dmhr.department d on e.department_id=d.department_id limit 2; 
行號     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          馬學銘     總經理辦
2          程擎武     行政部

6.5 分組查詢

// 語法:select 聚合函數 () from () group by () having();
// 聚合函數:sum,avg,max,min,count
// 算出各個部門的平均工資
SQL> select avg(salary),department_id from dmhr.employee group by department_id having avg(salary)>=16000;
行號     AVG(SALARY)  DEPARTMENT_ID
---------- ------------ -------------
1          16589.500000 303
2          19252.841270 703
// 算出各個部門的工資和,找出部門工資和大於500000的部門。
SQL> select department_id,sum(salary) from dmhr.employee group by department_id having sum(salary)>500000;        
行號     DEPARTMENT_ID SUM(SALARY)         
---------- ------------- --------------------
1          703           2425858
2          705           564024
// 注:having是分組後的數據進行過慮,不能單獨使用,having前面一定是有group by。
// 注:在select後出現的列,都要出現在group by後,聚合函數列不算。

6.6 子查詢

// 子查詢的結果是主查詢的條件,子查詢先於主查詢運行。
// a.返回值是唯一的。
//   語法:select () from () where () = ()
// 找出和馬學銘同一個部門的人員
SQL> select employee_name,department_id from dmhr.employee where department_id=(select department_id from dmhr.employee where employee_name='馬學銘');
行號     EMPLOYEE_NAME DEPARTMENT_ID
---------- ------------- -------------
1          馬學銘     101
2          陳辰        101
3          楊毓        101
4          嚴雲飛     101
5          鄭旭明     101
// b.返回值是多行的
//   語法:select () from () where () >/< any/all ();
// 找出比1002部門所有人員工資都高的人
select employee_name,department_id,salary from dmhr.employee where salary >all(select salary from dmhr.employee where department_id=1002);

7、表、視圖、索引

7.1 模式

模式:一組數據對象的集合,在創建用戶的時候,就會生成一個跟用戶同名的模式

7.2 表

達夢支持的表:默認的表(索引組織表),堆表,臨時表,分區表,外部表等
如何規劃表?
–命名:字符開頭a-z,0-9,$#_
–數據類型:int,char,varchar,date,clob,blob,number等
–存儲位置:自己規劃的表空間,未指定則是默認空間
–約束:非空,唯一,主鍵,檢查,外鍵
–註釋:comment

  • 案例1:規劃一張學員信息表

    ​ 表名:STU

    ​ 列:學號(id,char(10)),姓名(name,varchar(20)),性別(sex,char(1)),

    ​ 年齡(age,int),電話(tel,varchar(15)),家庭住址(address,varchar(50))

    ​ 表空間:STU

    ​ 約束:主鍵–學號,非空–姓名,電話

    ​ 備註:學員信息表

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

// 創建的SQL
create table "TEST"."STU"
(
	"id" CHAR(10) not null ,
	"name" VARCHAR(20) not null ,
	"sex" CHAR(1),
	"age" INT unique ,
	"tel" VARCHAR(15) not null ,
	"address" VARCHAR(50),
	primary key("id")
)
storage(initial 1, next 1, minextents 1, fillfactor 0, on "STU")
;
comment on table "TEST"."STU" is '學員信息表';
comment on column "TEST"."STU"."id" is '學號';
comment on column "TEST"."STU"."name" is '姓名';
comment on column "TEST"."STU"."sex" is '性別';
comment on column "TEST"."STU"."age" is '年齡';
comment on column "TEST"."STU"."tel" is '電話';
comment on column "TEST"."STU"."address" is '家庭住址';
// 查看錶結構
SQL> desc test.stu;
行號     NAME    TYPE$       NULLABLE
---------- ------- ----------- --------
1          id      CHAR(10)    N
2          name    VARCHAR(20) N
3          sex     CHAR(1)     Y
4          age     INTEGER     Y
5          tel     VARCHAR(15) N
6          address VARCHAR(50) Y

SQL> sp_tabledef('TEST','STU'); #區分大小寫
行號     COLUMN_VALUE                                                                                                                                 
---------- ---------------------------------------------------------------------------------------------------------------------------------------------
1          CREATE TABLE "TEST"."STU"  (  "id" CHAR(10) NOT NULL,  "name" VARCHAR(20) NOT NULL,  "sex" CHAR(1),  "age" INT,  "tel" VARCHAR(15) NOT NULL,  "address" VARCHAR(50),  CLUSTER PRIMARY KEY("id"),  UNIQUE("age")) STORAGE(ON "STU", CLUSTERBTR) ;

SQL> select dbms_metadata.get_ddl('TABLE','STU','TEST');
行號     DBMS_METADATA.GET_DDL('TABLE','STU','TEST')                                                                                                  
---------- ---------------------------------------------------------------------------------------------------------------------------------------------
1          CREATE TABLE "TEST"."STU"
(
"id" CHAR(10) NOT NULL,
"name" VARCHAR(20) NOT NULL,
"sex" CHAR(1),
"age" INT,
"tel" VARCHAR(15) NOT NULL,
"address" VARCHAR(50),
CLUSTER PRIMARY KEY("id"),
UNIQUE("age")) STORAGE(ON "STU", CLUSTERBTR) ;

// 如何查看錶在哪個表空間
SQL> select table_name,tablespace_name from dba_tables where table_name='STU';
行號     TABLE_NAME TABLESPACE_NAME
---------- ---------- ---------------
1          STU        STU
// 如何查看錶有哪些約束
SQL> select table_name,constraint_name,constraint_type from dba_constraints where table_name='STU';
行號     TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE
---------- ---------- --------------- ---------------
1          STU        CONS134218775   P
2          STU        CONS134218774   U
  • 案例2:創建表的時候指定約束

    SQL> create table test.t2(id int);
    SQL> alter table test.t2 modify id int not null;
    // 上面兩條語句等價於
    SQL> create table test.t3(id int not null);
    // 唯一約束
    SQL> create table test.t4(id int unique);
    // 主鍵約束
    SQL> create table test.t5(id int primary key);
    SQL> create table test.t6(id int);
    
    SQL> alter table test.t6 add constraint t6_pri primary key(id);
    // 檢查約束
    SQL> create table test.t8(id int);
    SQL> alter table test.t8 add constraint t9_check check(id>=5);
    
    SQL> create table test.t7(id int check(id>=5));
    // 外鍵約束
    SQL> create table test.t9(sid int primary key,pid int);
    SQL> create table test.t10(id int primary key, sid int foreign key references test.t9(sid));
    // 增加備註
    SQL> comment on column test.t2.id is '編號';
    
  • 如何導入數據

    • start語句
    [dmdba@localhost ~]$ pwd
    /home/dmdba
    [dmdba@localhost ~]$ cat q.sql
    insert into test.t2 values(1);
    insert into test.t2 values(2);
    insert into test.t2 values(3);
    
    [dmdba@localhost ~]$ disql sysdba/dameng123
    SQL> start /home/dmdba/q.sql
    SQL> insert into test.t2 values(1);
    
    SQL> select * from test.t2;
    行號     ID         
    ---------- -----------
    1          1
    2          2
    3          3
    
    
    • bin/dts工具

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  • 如何去維護表

    // 增加/刪除列
    SQL> alter table test.t2 add name varchar(20) default 'eason';
    SQL> alter table test.t2 drop name;
    // 啓用和禁用約束:
    SQL> alter table test.t9 disable constraint CONS134218782;
    SQL> alter table test.t9 enable constraint CONS134218782;
    // 刪除表
    SQL> drop table test.t2
    

7.3 視圖

分類:簡單視圖、複雜視圖、物化視圖

注:簡單視圖和複雜視圖不佔用磁盤空間

  • 創建視圖

    SQL> create view v1 as select * from dmhr.employee;
    
    SQL> select * from v1 limit 2;
    行號     EMPLOYEE_NAME JOB_ID
    ---------- ------------- ------
    1          馬學銘     11
    2          程擎武     21
    
  • 查看視圖

    SQL> select view_name,text from dba_views where view_name='V1';
    行號     VIEW_NAME TEXT                                           
    ---------- --------- -----------------------------------------------
    1          V1         SELECT EMPLOYEE_NAME,JOB_ID FROM DMHR.EMPLOYEE
    
  • 修改視圖

    SQL> create or replace view v1 as select employee_name from dmhr.employee;
    
    SQL> select view_name,text from dba_views where view_name='V1';
    行號     VIEW_NAME TEXT                                    
    ---------- --------- ----------------------------------------
    1          V1         SELECT EMPLOYEE_NAME FROM DMHR.EMPLOYEE
    
  • 刪除視圖

    SQL> drop view v1;
    

7.4 序列

  • 創建序列

    SQL> create sequence s1
    2   start with 1
    3   increment by 1
    4   maxvalue 10
    5   nocache
    6   nocycle;
    
  • 序列的應用

    SQL> create table test.t11(id int primary key);
    
    SQL> insert into test.t11 values(s1.nextval);
    SQL> insert into test.t11 values(s1.nextval);
    
    SQL> select * from test.t11;
    行號     ID         
    ---------- -----------
    1          1
    2          2
    

7.5 同義詞

表或視圖的別名,分爲普通同義詞(相當於私用同義詞)和公共同義詞(所有用戶都可以使用,只有sysdba可以創建)

  • 創建同義詞

    // 公共同義詞
    SQL> create public synonym ss1 for dmhr.employee;
    // 普通同義詞
    SQL> create synonym ss2 for dmhr.employee;
    
  • 修改同義詞

    SQL> create or replace synonym ss2 for dmhr.employee;
    
  • 刪除同義詞

    SQL> drop public synonym ss1;
    SQL> drop synonym ss2;
    

7.6 索引

達夢的分類:二級索引,唯一索引,複合索引,函數索引,分區索引等

默認的表是索引組織表,利用rowid創建一個默認的索引,所以我們創建的索引是二級索引

  • 查看索引

    SQL> select table_name,index_name from dba_indexes where table_name='T11';
    行號     TABLE_NAME INDEX_NAME   
    ---------- ---------- -------------
    1          T11        INDEX33555483
    
  • 索引的作用

    加快表的查詢,對數據庫做DML操作的時候,數據庫會自動維護索引。索引是一棵倒置的樹,使用索引,就是對這個索引樹進行遍歷。
    建立索引的規則:
      1、經常查詢的列
      2、連接條件列
      3、謂詞經常出現的列(where)
      4、查詢是返回表的一小部分數據 
    不適合創建索引的情況:
      1、列上有大量的null
      2、列上的數據有限(例如:性別)
    
  • 創建索引

    // 1.規劃索引表空間
    // 2.表的數據是無須的,索引的數據是有序的
    案例:複製dmhr.employee爲emp,給employee_id建立所以
    
    // 建立表
    SQL> create table test.emp as select * from dmhr.employee;
    // 建立表空間
    SQL> create tablespace indx datafile '/dm7/data/DAMENG/indx01.dbf' size 32;
    // 建立索引
    SQL> create index ind_mep on test.emp(employee_id) tablespace indx;
    
  • 查詢索引

    SQL> select table_name,index_name from dba_indexes where table_name='EMP';
    行號     TABLE_NAME INDEX_NAME   
    ---------- ---------- -------------
    1          EMP        INDEX33555484
    2          EMP        IND_MEP
    
  • 維護索引

    // 重建索引
    SQL> alter index ind_emp rebuild;
    // 刪除索引
    SQL> drop index ind_emp;
    

8、備份、還原

8.1 備份

備份分類:物理備份、邏輯備份

物理備份:

​ 冷備:dmap服務打開的狀態下,數據庫是關閉的

​ 熱備:dmap服務一定是打開的,數據庫是打開的,數據庫要開歸檔

邏輯備份:

​ 導入導出:dexp、dimp

​ 集羣:數據守護(dw)、DSC(RAC)

達夢支持的第三方備份軟件:愛數、鼎甲

  • 數據庫開歸檔:

​ 命令方式開歸檔:

// mount狀態
SQL> alter database mount;
// 設置歸檔路徑
SQL> alter database add archivelog 'type=local,dest=/dm7/arch,file_size=64,space_limit=0';
// 開歸檔
SQL> alter database archivelog;
// open狀態
SQL> alter database open;
// 查詢數據庫狀態
SQL> select name,status$,arch_mode from v$database;
行號     NAME   STATUS$     ARCH_MODE
---------- ------ ----------- ---------
1          DAMENG 4           Y
// 查詢歸檔參數
select * from v$dm_arch_ini;

  • 圖形工具開歸檔:
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 通過bin/dmrman去做備份(冷備):dmap服務需要開啓,數據庫實例關閉

在這裏插入圖片描述

[dmdba@localhost dm7]$ cd /dm7/bin
[dmdba@localhost bin]$ ./dmrman 
dmrman V7.6.0.197-Build(2019.09.12-112648)ENT 
RMAN> backup database '/dm7/data/DAMENG/dm.ini'
backup database '/dm7/data/DAMENG/dm.ini'
file dm.key not found, use default license!
checking if the database under system path [/dm7/data/DAMENG] is running...[4].
checking if the database under system path [/dm7/data/DAMENG] is running...[3].
checking if the database under system path [/dm7/data/DAMENG] is running...[2].
checking if the database under system path [/dm7/data/DAMENG] is running...[1].
checking if the database under system path [/dm7/data/DAMENG] is running...[0].
checking if the database under system path [/dm7/data/DAMENG] is running, write dmrman info.
EP[0] max_lsn: 64171
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 3 packages processed...
total 4 packages processed...
total 5 packages processed...
total 6 packages processed...
total 7 packages processed...
total 8 packages processed...
total 9 packages processed...
total 10 packages processed...
total 11 packages processed...
total 12 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/dm7/data/DAMENG/bak/DB_DAMENG_FULL_20191026_230952_000918] END, CODE [0]......
META GENERATING......
total 13 packages processed...
total 13 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 8082.198(ms)
  • 命令行方式下全備、增備(熱備)::dmap服務需要開啓,數據庫實例開啓
    在這裏插入圖片描述
[dmdba@localhost bin]$ cd /dm7/
[dmdba@localhost dm7]$ mkdir backup
[dmdba@localhost bin]$ disql SYSDBA/dameng123
// 完全備份
SQL> backup database full backupset '/dm7/backup/full_bak';
// 增量備份:是基於完全備份的,如果沒有變化,則取消備份
SQL> backup database increment backupset '/dm7/backup/incr_bak';
  • 利用管理工具進行備份(熱備)

​ 備份庫右擊指定工作目錄,新增/dm7/backup可以把上面用命令做的備份顯示出來
在這裏插入圖片描述

  • 注意事項

    備份的數據庫和表空間,如果做還原,是還原到當前時刻;如果備份的表做還原,還原到表的備份時刻。

    system表空間和roll表空間損壞,要重新初始化數據庫實例,再用備份去還原

    備份表空間:
    backup tablespace dmhr backupset ‘/dm7/backup/dmhr_bak’;
    備份表:

    backup table dmhr.employee backupset ‘/dm7/backup/dmhr_bak’;

8.2 還原

SQL> restore tablespace tbs2 from backupset '/dm7/backup/full_bak/';
SQL> alter tablespace tbs2 online;

9、作業操作

定期去執行任務

例如:定期做備份、定期收集統計信息等

9.1 配置作業

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

9.2 查看作業

// 作業的基本情況
SQL> select * from sysjob.sysjobs;
// 歷史執行情況
SQL> select * from sysjob.sysjobhistories;
// 調度情況
SQL> select * from sysjob.sysjobschedules;
// 步驟情況
SQL> select * from sysjob.sysjobsteps;

10、存儲過程和觸發器

10.1 存儲過程

// 寫匿名塊
// declare (可選項)
// begin
//   body;
// exception
// end;
SQL> set serveroutput on
SQL> begin
2   print('hello world');
3   end;
4   /
hello world

SQL> begin
2   for i in 1..5 loop 
3     print(i);
4   end loop;
5   end;
6   /
1
2
3
4
5

// 實例:根據員工的編號找出員工的所在部門
CREATE OR REPLACE PROCEDURE "SYSDBA"."AAA"("BH" IN INT)
AS
	/*變量說明部分*/
	dept INT;
BEGIN
	/*執行體*/
	select department_id into dept from test.emp where employee_id=BH;
	print(dept);
END;

// 調用存儲過程
SQL> call AAA(1001);
101

在這裏插入圖片描述
在這裏插入圖片描述

10.2 觸發器

分類:表級別、庫級別、模式級別、視圖級別

庫級別觸發器:對數據庫做drop操作的時候記錄操作時間/用戶

// 案例:員工表工資發生改動,記錄改動前和改動後的值
create trigger "SYSDBA"."EEE"
before UPDATE of "SALARY"
on "SYSDBA"."EMP"
for each row
BEGIN
   insert into TAB1 values(:old.salary,:new.salary);
END;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章