DM7使用Disql執行表還原

eric0435發表於2020-08-12

DM7僅支援表空間和表的聯機還原,資料庫和歸檔日誌的還原必須透過離線工具DMRMAN執行。下面主要介紹如何使用DIsql工具還原表空間和表。
下面將介紹使用DIsql工具完成基本的表還原操作及實施一些還原策略。主要內容包括:
1. 概述
2. 表還原

1. 概述
表還原與表空間還原不同,不需要配置歸檔,DIsql中輸入以下簡單的RESTORE語句就可還原表:

SQL>RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
語法如下:
RESTORE TABLE [<表名>][STRUCT]
[WITH INDEX | WITHOUT INDEX] [WITH CONSTRAINT|WITHOUT CONSTRAINT]
FROM BACKUPSET'<備份集路徑>' [DEVICE TYPE <介質型別> [PARMS '<介質引數>']]
[IDENTIFIED BY <密碼>] [ENCRYPT WITH <加密演算法>]
[TRACE FILE '<TRACE檔名>'] [TRACE LEVEL <TRACE日誌級別>];

TABLE:需要還原的表名稱。

STRUCT:執行表結構還原,若未指定,則認為是表中資料還原;表資料還原要求還原目標表結構與備份集中完全一致,否則報錯,所以表結構還原可以在表資料還原之前執行,減少報錯。

WITH INDEX/WITHOUT INDEX:指定還原資料後是否重建二級索引,預設重建。

WITH CONSTRAINT/WITHOUT CONSTRAINT:指定還原資料後是否重建約束,預設重建。

BACKUPSET:表空間備份時指定的備份集路徑。若指定為相對路徑,會在預設備份目錄下搜尋備份集。

DEVICE TYPE:指儲存備份集的介質型別,目前表還原暫時僅支援DISK,表示備份集儲存介質為磁碟。

PARMS:介質引數,只對介質型別為TAPE時有效。

IDENTIFIED BY:加密備份表時,使用者設定的密碼。

ENCRYPT WITH:加密演算法。預設情況下,演算法為AES256_CFB。

TRACE FILE:指定生成的TRACE檔名。

TRACE LEVEL:有效值1、2,預設為1表示不啟用TRACE,為2表示啟用TRACE。

使用說明:
1. 僅支援對普通使用者表進行還原,包括堆表。其中,系統表、臨時表、物化檢視表、物化檢視附屬表和日誌表、特定模式(DBG_PKG/INFORMATION_SCHEMA/INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYSCPT/SYS)下的表不支援還原。表列型別為物件型別的表也不支援表還原。若還原表中存在點陣圖連線索引和點陣圖連線虛索引也不支援還原。

2. 備份集路徑指備份集所在目錄,其中應包含完整備份資料,包括後設資料檔案(.meta)和備份片檔案(.bak)。僅支援從表備份集中還原表。

3. 表名設定為可選引數。若指定,則表必須存在且表定義必須與備份表嚴格一致;若不指定,則使用備份集中記錄的備份表作為還原目標表。

4. 若指定WITHOUT INDEX,則還原後目標表中無索引資訊,即使目標表本來存在,也會被刪除;若未指定,則在資料還原後重新建立備份集中索引,目標表原來的索引資訊會被刪除。

5. 若指定WITHOUT CONSTRAINT,則還原後目標表中無約束資訊,聚集主鍵除外,即使目標表本來存在,也會被刪除;若未指定,則在資料還原後重新建立備份集中約束,目標表原來的約束資訊會被刪除。

6. 目標表所在的表空間必須處於聯機狀態。

7. 資料守護環境下,主庫允許表備份還原,備庫不允許。

8. MOUNT和SUSPEND狀態下不允許進行表還原。

9. MPP環境不允許進行表還原。

10. 若在語句中指定STRUCT關鍵字,則執行表結構還原。表結構還原會根據備份集中備份表還原要求,對目標表定義進行校驗,並刪除目標表中已存在的二級索引和約束;若未指定WITHOUT CONSTRAINT,則會將備份集中的CHECK約束在目標表上重建。

11. 不指定STRUCT關鍵字,則執行表資料還原,表資料還原預設僅會將備份表中聚集索引上資料進行還原。表資料還原預設僅會在目標表定義與備份表一致且不存在二級索引和約束的情況下執行;若還原時未指定WITHOUT CONSTRAINT,也允許目標表中存在與備份表中相同的CHECK約束。

12. 若在未指定STRUCT的情況下,執行還原出現存在二級索引或冗餘約束的錯誤;或者不指定目標表時,報目標不存在的情況,可先執行STRUCT還原後,再繼續執行實際資料的還原。

13. WITH /WITHOUT INDEX用於指定還原資料後是否重建二級索引,預設重建;WITH/WITHOUT CONSTRAINT指定還原資料後是否在目標表上重建約束,預設重建。對於備份表中存在的無效索引和約束,若索引為無效或者不可見,則重建後,也保持無效或者不可見;若約束無效,則重建後,約束也保持無效狀態。

14. TRACE FILE若使用者指定,則指定的檔案不能為已經存在的檔案,否則報錯;也不可以為ASM檔案。

15. 若表中存在大欄位列,表備份時INI引數BLOB_OUTROW_REC_STOR大於0,而建立還原目標表時INI引數BLOB_OUTROW_REC_STOR等於0,那麼若大欄位列存在行外資料,在執行表還原時會報錯,且表資料會丟失。

16. 表還原不檢查目標表的預設表示式(default值)。

2. 表還原
執行表還原,資料庫必須處於OPEN狀態,MOUNT和SUSPEND狀態下不允許執行表還原。與表空間還原不同,表還原不需要配置歸檔。表還原是聯機完全備份還原,不需要藉助本地歸檔日誌,所以還原後不需要恢復。完整的表備份還原步驟如下:
1) 保證資料庫為OPEN狀態。
2) 建立待備份的表。

SQL> create table tab_for_res_1(c1 int);
操作已執行
已用時間: 3.498(毫秒). 執行號:57.
SQL> begin
2   for i in 1 .. 100 loop
3   insert into tab_for_res_1 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 過程已成功完成
已用時間: 2.710(毫秒). 執行號:58.

3) 備份表資料。

SQL> backup table tab_for_res_1 to tab_for_res_1_bak backupset 'E:\dmdbms\backup\tab_for_res_1_bak';
操作已執行
已用時間: 00:00:01.138. 執行號:59.

4) 校驗備份。此步驟為可選。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\tab_for_res_1_bak');
行號       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\tab_for_res_1_bak')
---------- ------------------------------------------------------------
1          1
已用時間: 21.435(毫秒). 執行號:60.

5) 還原表資料。

SQL> truncate table tab_for_res_1;
操作已執行
已用時間: 5.238(毫秒). 執行號:62.
SQL> select count(*) from tab_for_res_1;
行號       COUNT(*)
---------- --------------------
1          0
已用時間: 1.165(毫秒). 執行號:63.
SQL> restore table tab_for_res_1 from backupset 'E:\dmdbms\backup\tab_for_res_1_bak';
操作已執行
已用時間: 68.217(毫秒). 執行號:64.
SQL> select count(*) from tab_for_res_1;
行號       COUNT(*)
---------- --------------------
1          100
已用時間: 1.329(毫秒). 執行號:65.

表還原實質是表內資料的還原,以及索引和約束等的重建。如果備份檔案與目標表中都包含索引或約束該如何還原呢?下面以表中包含索引為例說明如何還原表,具體步驟如下:
1) 保證資料庫為OPEN狀態。
2) 建立待備份的表。

SQL> create table tab_for_res_2(c1 int);
操作已執行
已用時間: 3.088(毫秒). 執行號:67.
SQL> begin
2   for i in 1 .. 10 loop
3   insert into tab_for_res_2 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 過程已成功完成
已用時間: 5.434(毫秒). 執行號:68.

3) 建立索引。

SQL> create index i_tab_for_res_2 on tab_for_res_2(c1);
操作已執行
已用時間: 6.720(毫秒). 執行號:69.

4) 備份表。

SQL> backup table tab_for_res_2 backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
操作已執行
已用時間: 00:00:01.102. 執行號:70.

5) 校驗備份。此步驟為可選。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\tab_for_res_2_bak');
行號       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\tab_for_res_2_bak')
---------- ------------------------------------------------------------
1          1
已用時間: 38.046(毫秒). 執行號:71.

6) 執行表結構還原。表備份和表中都包含索引,如果直接執行表資料還原會報錯:還原表中存在二級索引或冗餘約束。

SQL> truncate table tab_for_res_2;
操作已執行
已用時間: 4.115(毫秒). 執行號:73.
SQL> select * from tab_for_res_2;
未選定行
已用時間: 1.113(毫秒). 執行號:74.
SQL> restore table tab_for_res_2 from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
restore table tab_for_res_2 from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
[-8327]:還原表中存在二級索引或冗餘約束.
已用時間: 22.306(毫秒). 執行號:0.
SQL> restore table tab_for_res_2 struct from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
操作已執行
已用時間: 27.047(毫秒). 執行號:76.

7) 執行表資料還原。

SQL> restore table tab_for_res_2 from backupset 'E:\dmdbms\backup\tab_for_res_2_bak';
操作已執行
已用時間: 66.335(毫秒). 執行號:77.
SQL> select * from tab_for_res_2;
行號       C1
---------- -----------
1          1
2          2
3          3
4          4
5          5
6          6
7          7
8          8
9          9
10         10
10 rows got
已用時間: 1.491(毫秒). 執行號:78.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2711149/,如需轉載,請註明出處,否則將追究法律責任。

相關文章