Linux平臺達夢數據庫V7之表空間管理

一 前言

我們在DM邏輯結構的學習中已經知道,表空間是一個邏輯概念,其對應oracle邏輯關係圖如下:

從上圖可以看出其關係:
數據庫-- tablespace -- segement--extent(cluster)-block (page)
簇:數據庫申請空間的最小邏輯單位
頁:數據庫存儲數據的最小邏輯單位

二 表空間管理

表空間的管理操作需要 DM 服務器處於打開狀態下。

2.1 創建表空間

DM Server 的內存池指的是共享內存池,根據內存使用情況的不同,對共享內存池的使用採用了兩種工作方式:HEAP 和 VPOOL。
創建表空間時需要指定表空間名和其擁有的數據文件列表。比如創建名爲 bookshop 的表空間,並指定該空間上擁有 2 個數據文件,每個數據文件的大小爲 128M。
CREATE TABLESPACE bookshop DATAFILE 'd:\bookshop1.dbf' SIZE 128,'d:\bookshop2.dbf' SIZE 128;
理論上最多允許有 65535 個表空間,但用戶允許創建的表空間 ID 取值範圍爲0~32767,超過 32767 的只允許系統使用,ID 由系統自動分配,ID 不能重複使用,即使刪除掉已有表空間,也無法重複使用已用 ID 號,也就是說只要創建 32768 次表空間後,用戶將無法再創建表空間。
創建表空間語法格式:
CREATE TABLESPACE <表空間名> <數據文件子句>[<數據頁緩衝池子句>][<存儲加密子句>]
<數據文件子句> ::= DATAFILE <文件說明項>{,<文件說明項>}
<文件說明項> ::= <文件路徑> [ MIRROR <文件路徑>] SIZE <文件大小>[<自動擴展子句>]
<自動擴展子句> ::= AUTOEXTEND <ON [<每次擴展大小子句>][<最大大小子句> |OFF>
<每次擴展大小子句> ::= NEXT <擴展大小>
<最大大小子句> ::= MAXSIZE <文件最大大小>
<數據頁緩衝池子句> ::= CACHE = <緩衝池名>
<存儲加密子句> ::= ENCRYPT WITH <加密算法> [[BY] <加密密碼>]
參數

  1. <表空間名> 表空間的名稱,表空間名稱最大長度 128 字節;
  2. <文件路徑> 指明新生成的數據文件在操作系統下的路徑+新數據文件名。數據文
    件的存放路徑符合 DM 安裝路徑的規則,且該路徑必須是已經存在的;
  3. MIRROR 數據文件鏡像,用於在數據文件出現損壞時替代數據文件進行服務。
    MIRROR 數據文件的<文件路徑>必須是絕對路徑。MIRROR 要使用數據文件鏡像,
    必須在建庫時開啓頁校驗的參數 page_check。
  4. <文件大小> 整數值,指明新增數據文件的大小(單位 MB),取值範圍 4096頁大
    小~2147483647
    頁大小;
  5. <緩衝池名> 系統數據頁緩衝池名 NORMAL 或 KEEP。緩衝池名 KEEP 是達夢的保
    留關鍵字,使用時必須加雙引號;
  6. <加密算法> 可通過查看動態視圖 V$CIPHERS 獲取算法名;
  7. <加密密碼> 最大長度 128 字節,若未指定,由 DM 隨機生成。
    使用說明
  8. 表空間名在服務器中必須唯一;
  9. 一個表空間中,數據文件和鏡像文件一起不能超過 256 個;
  10. 如果全庫已經加密,就不再支持表空間加密。

    2.2 擴展表空間

    表空間通過數據文件來擴展,表空間的大小等於構成該表空間的所有數據文件的大小之和。所以要擴展表空間可以通過添加新的數據文件或者擴展表空間中已有的數據文件完成。
    擴展表空間方式:
    注:管理數據文件的操作需要 DM 服務器處於打開狀態下。
    1) 添加數據文件
    可以在用戶表空間中添加數據文件。添加的數據文件大小最小爲 4096頁大小,如頁大小爲 8K,則可添加的文件最小值爲 40968k=32M。比如在 bookshop 表空間中添加大小爲 64M 的數據文件。
    ALTER TABLESPACE bookshop ADD DATAFILE 'd:\book.dbf' SIZE 64;
    一個表空間中,數據文件和鏡像文件一起不能超過 256 個。例如,如果創建表空間的時候已經指定了 1 個數據文件,那麼添加數據文件的時候,最多隻能添加 255 個了。
    2) 擴展現有數據文件大小
    可以擴展用戶表空間中已存在的數據文件的大小。比如擴展 bookshop 表空間中數據文件 book.dbf 大小至 128M。
    ALTER TABLESPACE bookshop RESIZE DATAFILE 'd:\book.dbf' TO 128;
    3) 指定數據文件的擴展屬性
    可以指定數據文件是否可以擴展,每次擴展的空間大小以及數據文件可擴展到的最大空間大小,子句的語法爲:
    AUTOEXTEND OFF|ON [NEXT <文件擴展大小>] [MAXSIZE <文件限制大小>]
    OFF 表示文件不可擴展,ON 表示文件可擴展。文件擴展大小表示當需要擴展文件時,文件一次增大的空間大小,取值範圍是 0—2048,單位是 M。文件限制大小表示文件可擴展的最大空間大小,爲 0 或者 UNLIMITED 表示無限制,單位是 M。缺省情況下,文件擴展大小是 1M,文件的最大大小是無限制的。
    創建表空間時可指定文件的擴展屬性。如創建表空間時指定數據文件的擴展屬性爲可自動擴展,每次擴展大小爲 10M,最大可擴展到 100M:
    CREATE TABLESPACE bookshop DATAFILE 'd:\book.dbf' SIZE 32 AUTOEXTEND ON NEXT 10 MAXSIZE 100;
    在表空間中添加文件時可指定文件的擴展屬性。如添加數據文件時指定擴展屬性爲不可自動擴展:
    ALTER TABLESPACE bookshop ADD DATAFILE 'd:\book.dbf' SIZE 1024 AUTOEXTEND OFF;
    可修改表空間中已存在的數據文件的擴展屬性。如修改數據文件的擴展屬性爲可自動擴展:
    ALTER TABLESPACE bookshop DATAFILE 'd:\book.dbf' AUTOEXTEND ON;

    2.3 刪除表空間

    只可以刪除用戶創建的表空間並且只能刪除未使用過的表空間。刪除表空間時會刪除其擁有的所有數據文件。例如刪除 bookshop 表空間。
    DROP TABLESPACE bookshop;
    刪除表空間語法:
    DROP TABLESPACE <表空間名>
    參數
    <表空間名> 所要刪除的表空間的名稱。
    使用說明

  11. SYSTEM、RLOG、ROLL 和 TEMP 表空間不允許刪除;
  12. 系統處於 SUSPEND 或 MOUNT 狀態時不允許刪除表空間,系統只有處於 OPEN 狀態下才允許刪除表空間。

    2.4 修改表空間

    語法:
    ALTER TABLESPACE <表空間名> [ONLINE|OFFLINE|CORRUPT|<表空間重命名子句>|<數據文件重命名子句>|<增加數據文件子句>|<修改文件大小子句>|<修改文件自動擴展子句>|<數據頁緩衝池子句>
    <表空間重命名子句> ::= RENAME TO <表空間名>
    <數據文件重命名子句>::= RENAME DATAFILE <文件路徑>{,<文件路徑>} TO <文件路徑>{,<文件路徑>}
    <增加數據文件子句> ::= ADD <數據文件子句>
    <數據文件子句>見上一節表空間定義語句
    <修改文件大小子句> ::= RESIZE DATAFILE <文件路徑> TO <文件大小>
    <修改文件自動擴展子句> ::= DATAFILE <文件路徑>{,<文件路徑>}[<自動擴展子句>]
    <自動擴展子句> ::= AUTOEXTEND <ON [<每次擴展大小子句>][<最大大小子句> |OFF>
    <數據頁緩衝池子句> ::= CACHE = <緩衝池名>
    參數

  13. <表空間名> 表空間的名稱;
  14. <文件路徑> 指明數據文件在操作系統下的路徑+新數據文件名。數據文件的存放路徑符合 DM 安裝路徑的規則,且該路徑必須是已經存在的;
  15. <文件大小> 整數值,指明新增數據文件的大小(單位 MB);
  16. <緩衝池名> 系統數據頁緩衝池名 NORMAL 或 KEEP。
    使用說明
  17. 不論 dm.ini 的 DDL_AUTO_COMMIT 設置爲自動提交還是非自動提交,ALTER TABLESPACE 操作都會被自動提交;
  18. 修改表空間數據文件大小時,其大小必須大於自身大小;
  19. 如果表空間有未提交事務時,表空間不能修改爲 OFFLINE 狀態;
  20. 重命名錶空間數據文件時,表空間必須處於 OFFLINE 狀態,修改成功後再將表空間修改爲 ONLINE 狀態;
  21. 表空間如果發生損壞(表空間還原失敗,或者數據文件丟失或損壞)的情況下,允許將表空間切換爲 CORRUPT 狀態,並刪除損壞的表空間,如果表空間上定義有對象,需要先將所有對象刪除,再刪除表空間。

    2.4.1 修改表空間名

    可修改已存在的由用戶創建的表空間的名稱。比如可修改 bookshop 表空間名爲books。
    ALTER TABLESPACE bookshop RENAME TO books;

    2.4.2 修改表空間狀態

    用戶表空間有聯機和脫機兩種狀態。系統表空間、回滾表空間、重做日誌表空間和臨時文件表空間不允許脫機。設置表空間狀態爲脫機狀態時,如果該表空間有未提交的事務,則脫機失敗報錯。脫機後可對錶空間的數據進行備份。例如修改 bookshop 表空間狀態爲脫機。
    ALTER TABLESPACE bookshop OFFLINE;
    修改 bookshop 表空間狀態爲聯機。
    ALTER TABLESPACE bookshop ONLINE;
    注意:MPP 環境下,可能發現節點間的表空間不一致情況,如:EP01 爲 ONLINE 狀態,EP02 爲 OFFLINE 狀態,這個時候,如論執行 ONLINE 還是 OFFLINE 都是報錯。需要用戶介入纔可解決問題。用戶LOCAL方式登錄實例 , 並 執 行SP_SET_SE$$ION_LOCAL_TYPE(1),使得該會話可以執行 DDL 操作,再執行 ONLINE 或者 OFFLINE 即可。

    2.4.3 修改表空間數據緩衝區

    用戶表空間可以切換使用的數據緩衝區,系統表空間、回滾表空間、重做日誌表空間和臨時文件表空間不允許修改數據緩衝區。可以使用的數據緩衝區有 NORMAL 和 KEEP。表空間修改成功後,並不會立即生效,而是需要服務器重啓。緩衝池名 KEEP 是達夢的保留關鍵字,使用時必須加雙引號。例如將 bookshop 表空間綁定到 KEEP 緩衝區。
    ALTER TABLESPACE bookshop CACHE= "KEEP";

    2.4.4 指定數據文件的擴展屬性

    參考2.2擴展表空間中指定數據文件的擴展屬性的說明。

    2.4.5 修改數據文件的路徑

    可以修改用戶表空間中已存在數據文件的路徑,待修改的數據文件所在表空間必須處於脫機狀態並且只可修改用戶創建的表空間中文件的路徑。如修改 bookshop 表空間中文件book.dbf 的路徑爲 e:\ book.dbf。
    ALTER TABLESPACE bookshop RENAME DATAFILE 'd:\book.dbf' TO 'e:\book.dbf';

    2.4.6 查詢表空間與數據文件對應關係

    可以通過查詢動態視圖 V$TABLESPACE 得到系統中所有表空間的信息,通過查詢動態視圖 V$DATAFILE 得到系統中所有數據文件的信息。將兩個動態視圖以表空間 ID 爲連接條件,通過以下查詢可以得到表空間上對應的數據文件。
    SELECT ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;

    2.4.7 表空間文件失效檢查

    LINUX 操作系統中,被進程打開的文件仍可以在 OS 系統中被刪除,因此存在 DM7 數據文件可能被誤刪的風險。如果數據文件被刪除,DM7 系統能夠及時檢測出來,並立刻停止對其繼續使用並通知用戶。
    在 dm.ini 中參數 FIL_CHECK_INTERVAL 的值指定 DM7 系統檢查數據文件是否仍存在的時間間隔。將其設爲 0 表示不進行檢查。
    也可以通過系統過程 SP_FILE_SYS_CHECK()來手動的進行檢查。
    系統一旦檢測出某個表空間內的數據文件被刪除,則與該表空間所有的操作都將會失敗,並報錯該表空間內有數據文件被刪除。
    表空間恢復失效文件的檢查
    語法格式
    SP_FILE_SYS_CHECK ();
    語句功能
    在 LINUX 操作系統下,檢查是否有數據文件被刪除。
    使用說明
    該過程只在 LINUX 下有效。
    舉例說明
    SP_FILE_SYS_CHECK ();

    2.4.8 表空間失效文件恢復

    LINUX 系統中被刪除的文件,只要其句柄沒有被關閉,可以在/pr0c/<pid>/fd 中找到其對應的文件副本。其中<pid>指打開該文件的進程 id。
    利用該方法,結合 OS 命令,DM7 提供失效文件的恢復方案如下:
    1、 調用系統過程 SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)準備進行恢復;
    2、 如果使用過程中 DM 報錯表空間數據文件被刪除,通過操作系統的 ps 命令找到當前dmserver 的 PID:ps –ef|grepdmserver;
    3、 使用操作系統 ls 命令查看被刪除文件對應的副本:ls /pr0c/<PID>/fd–l,會發現被刪除的文件後有(deleted)字樣;
    4、 使 用 操 作 系 統 的 cp 命 令 將 文 件 復 制 到 原 位 置cpbak_fildata_file_path_dir;
    5、 複製成功後,調用系統過程 SP_TABLESPACE_RECOVER(ts_name)完成表空間失效文件的恢復。
    注意,要保證數據文件正確修復,需要保證在 SP_TABLESPACE_PREPARE_RECOVER後進行數據文件的複製。
    1)表空間恢復失效文件的準備
    語法格式
    SP_TABLESPACE_PREPARE_RECOVER(<表空間名>);
    語句功能
    在 LINUX 操作系統下,如果出現了正在使用數據文件被刪除的情況,該過程完成失效文件恢復的準備工作。
    使用說明
    該過程只在 LINUX 下有效。
    舉例說明
    SP_TABLESPACE_PREPARE_RECOVER('MAIN');
    2)表空間失效文件的恢復
    語法格式
    SP_TABLESPACE_RECOVER(<表空間名>);
    語句功能
    在 LINUX 操作系統下,如果出現了正在使用數據文件被刪除的情況,在調用了恢復準備的 SP_TABLESPACE_PREPARE_RECOVER 及在 OS 系統內完成了數據文件的複製後,調用該過程完成文件的恢復工作。表空間失效文件恢復的詳細步驟可查閱系統管理員手冊。
    使用說明

  22. 該過程只在 LINUX 下有效;
  23. 在 SP_TABLESPACE_PREPARE_RECOVER 及在 OS 系統內完成了數據文件的複製後調用。
    舉例說明
    SP_TABLESPACE_RECOVER('MAIN');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章