DM7使用Disql執行表空間還原

eric0435發表於2020-08-11

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

1. 概述
在DIsql中使用RESTORE語句可以還原表空間,還原表空間需要伺服器執行在歸檔模式下且還原之前需要將表空間離線。啟動DIsql輸入以下語句即可還原表空間:

SQL> backup tablespace main to ts_main_bak backupset 'E:\dmdbms\backup\ts_main_bak';
操作已執行
已用時間: 00:00:01.066. 執行號:4.
SQL> alter tablespace main offline;
操作已執行
已用時間: 101.032(毫秒). 執行號:5.
SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak';
操作已執行
已用時間: 316.624(毫秒). 執行號:6.
SQL> alter tablespace main online;
操作已執行
已用時間: 9.330(毫秒). 執行號:7.

指定備份集“E:\dmdbms\backup\ts_main_bak”為絕對路徑,如果指定相對路徑,伺服器自動會在預設備份路徑下搜尋備份集。

語法如下:

RESTORE TABLESPACE < 表空間名>
[DATAFILE< <檔案編號> {,< 檔案編號>} | '< 檔案路徑>' {,'< 檔案路徑>'}>]
FROM BACKUPSET '< 備份集路徑>' [DEVICE TYPE < 介質型別> [PARMS '< 介質引數>']]
[IDENTIFIED BY < 加密密碼>] [ENCRYPT WITH < 加密演算法>]
[WITH BACKUPDIR '< 備份目錄>' {,'< 備份目錄>'}]
[WITH ARCHIVEDIR '歸檔目錄'{,'歸檔目錄'}]
[MAPPED FILE '< 對映檔案>']
[TRACE FILE ''] [TRACE LEVEL ][TASK THREAD < 執行緒數>][NOT PARALLEL]
[UNTIL TIME '< 時間串>'] [UNTIL LSN ];

TABLESPACE:指定還原的表空間,除了temp表空間。

DATAFILE:還原指定的資料檔案。可以指定資料檔案編號或資料檔案路徑。檔案編號,對應動態檢視V$DATAFILE中ID列的值;檔案路徑,對應動態檢視V$DATAFILE中PATH或者MIRROR_PATH列的值,也可以僅指定資料檔名稱(相對路徑),與表空間中資料檔案匹配時,會使用SYSTEM目錄補齊。

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

DEVICE TYPE:指儲存備份集的介質型別,支援DISK和TAPE,預設DISK。DISK表示備份集儲存介質為磁碟,TAPE表示備份集儲存介質為磁帶。

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

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

ENCRYPT WITH:加密演算法。預設情況下,演算法為AES256_CFB。具體包含哪些加密演算法請參考表空間備份的引數說明。

WITH BACKUPDIR:指定備份搜尋目錄,最大長度為256個位元組。使用完全備份還原中,若指定的備份集路徑為相對路徑可透過設定此引數搜尋備份集;增量備份還原中設定該引數除上述功能外還用於搜尋基備份集。

WITH ARCHIVEDIR:歸檔日誌搜尋目錄。如果歸檔日誌不在配置檔案中指定的目錄下,或者歸檔日誌分散在多個目錄,此時就需要指定該引數用於搜尋歸檔日誌。

MAPPED FILE :指定存放還原目標路徑的檔案,參考3.3.5.2.1小節。

TRACE FILE: 指定生成的TRACE檔案。啟用TRACE,但不指定TRACE FILE時,預設在DM資料庫系統的log目錄下生成DM_SBTTRACE_年月.LOG檔案;若使用相對路徑,則生成在執行碼同級目錄下。若使用者指定,則指定的檔案不能為已經存在的檔案,否則報錯;也不可以為ASM檔案。

TRACE LEVEL:有效值1、2,預設為1表示不啟用TRACE,此時若指定了TRACE FILE,會生成TRACE檔案,但不寫入TRACE資訊;為2啟用TRACE並寫入TRACE相關內容。

TASK THREAD:還原過程中資料處理過程執行緒的個數,取值範圍0~64,預設為4,與備份過程中資料處理過程相對應。若指定為0,則調整為1;若指定超過當前系統主機核數,則調整為當前系統主機核數。

NOT PARALLEL:指定並行備份集使用非並行方式還原。對於非並行備份集,不論是否指定該關鍵字,均採用非並行還原。

UNTIL TIME:恢復表空間到指定的時間點。主備環境不支援。

UNTIL LSN:恢復表空間到指定的LSN。主備環境不支援。

表空間還原不建議使用UNTIL LSN或者UNTIL TIME,若要使用,則確保備份集生成之後未執行過DDL操作,否則將可能出現不可預知的後果。

使用說明:
1. 支援從非DDL_CLONE的庫級備份集和表空間級備份集中還原出指定表空間,若還原目標表空間狀態不是RES_OFFLINE或CORRUPT,還原指定表空間中指定資料檔案。
2. 備份集路徑是指備份集所在目錄,其中應包含完整備份資料,包括後設資料檔案(.meta)和備份片檔案(.bak)。
3. 還原前應該先將還原的表空間離線,只能還原使用者表空間。
4. 該功能在配置本地歸檔後才起作用,若為RAC庫中表空間還原,則需要配置REMOTE歸檔。
5. MPP環境不允許進行表空間還原。
6. 若指定NOT PARALLEL,則認為並行備份不使用並行還原,預設並行備份執行並行還原。對於非並行備份集還原,則忽略。
7. 若未指定UNTIL TIME或者UNTIL LSN,則均還原到最新狀態。使用UNTIL TIME(或者UNTIL LSN)的同時不能指定DATAFILE還原,否則報語法錯誤。
8. OPEN和MOUNT狀態下支援表空間還原,SUSPEND狀態下則不支援。

2. 表空間還原
本節介紹使用DIsql工具如何還原表空間。本節主要內容包括:
1. 使用表空間完全備份還原表空間
2. 使用表空間增量備份還原表空間
3. 使用資料庫備份還原表空間

1.使用表空間完全備份還原表空間
表空間的還原、恢復操作是一次性完成,因此還原後不需要執行恢復操作。使用表空間完全備份還原表空間的完整步驟如下:
1) 配置歸檔。
2) 保證資料庫處於OPEN或MOUNT狀態。
3) 備份表空間。

SQL> backup tablespace main to ts_main_bak backupset 'E:\dmdbms\backup\ts_main_bak';
操作已執行
已用時間: 00:00:01.069. 執行號:9.

4) 校驗表空間備份。此步驟為可選,如果確定備份檔案合法可不進行備份校驗。

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

5) 修改表空間為離線。

SQL> alter tablespace main offline;
操作已執行
已用時間: 137.581(毫秒). 執行號:11.

6) 還原表空間。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak';
操作已執行
已用時間: 276.897(毫秒). 執行號:12.

7) 修改表空間為聯機。

SQL> alter tablespace main online;
操作已執行
已用時間: 17.971(毫秒). 執行號:13.

2.使用表空間增量備份還原表空間
在增量備份與基備份同目錄情況下,使用增量備份還原表空間步驟與完全備份一致。當增量備份與基備份不在同一個目錄下時需要使用RESTORE TABLESPACE...WITH BACKUPDIR語句還原。這裡以後面一種情況為例說明使用增量備份還原表空間。步驟如下:
1) 配置歸檔。
2) 保證資料庫處於OPEN或MOUNT狀態。
3) 完全備份表空間。

SQL> backup tablespace main to ts_main_full_bak backupset 'E:\dmdbms\backup\ts_main_full_bak';
操作已執行
已用時間: 00:00:01.095. 執行號:35.

4) 多次增量備份表空間。

SQL> begin
2   for i in 1 .. 100 loop
3    insert into t1 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 過程已成功完成
已用時間: 3.383(毫秒). 執行號:36.
SQL> backup tablespace main increment with backupdir 'E:\dmdbms\backup\ts_main_full_bak' backupset 'E:\dmdbms\backup1\ts_main_incr_bak_01';
操作已執行
已用時間: 00:00:01.079. 執行號:37.
SQL> begin
2   for i in 101 .. 200 loop
3   insert into t1 values(i);
4   end loop;
5   end;
6   /
DMSQL 過程已成功完成
已用時間: 1.274(毫秒). 執行號:38.
SQL> alter system switch logfile;
操作已執行
已用時間: 14.166(毫秒). 執行號:0.
SQL> backup tablespace main increment with backupdir 'E:\dmdbms\backup\ts_main_full_bak','E:\dmdbms\backup1\ts_main_incr_bak_01' backupset 'E:\dmdbms\backup2\ts_main_incr_bak_02';
操作已執行
已用時間: 00:00:01.081. 執行號:39.

5) 校驗表空間備份。此步驟為可選,如果確定備份檔案合法可不進行備份校驗。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_main_full_bak');
行號       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_main_full_bak')
---------- -----------------------------------------------------------
1          1
已用時間: 20.931(毫秒). 執行號:40.
SQL> select sf_bakset_check('disk','E:\dmdbms\backup1\ts_main_incr_bak_01');
行號       SF_BAKSET_CHECK('disk','E:\dmdbms\backup1\ts_main_incr_bak_01')
---------- ---------------------------------------------------------------
1          1
已用時間: 31.184(毫秒). 執行號:41.
SQL> select sf_bakset_check('disk','E:\dmdbms\backup2\ts_main_incr_bak_02');
行號       SF_BAKSET_CHECK('disk','E:\dmdbms\backup2\ts_main_incr_bak_02')
---------- ---------------------------------------------------------------
1          1
已用時間: 25.171(毫秒). 執行號:42.

6) 修改表空間為離線

SQL> alter tablespace main offline;
操作已執行
已用時間: 98.420(毫秒). 執行號:43.

7) 使用增量備份E:\dmdbms\backup2\ts_main_incr_bak_02還原表空間。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup2\ts_main_incr_bak_02' with backupdir 'E:\dmdbms\backup\ts_main_full_bak','E:\dmdbms\backup1\ts_main_incr_bak_01';
操作已執行
已用時間: 370.046(毫秒). 執行號:44.

8) 修改表空間為聯機。

SQL> alter tablespace main online;
操作已執行
已用時間: 15.717(毫秒). 執行號:45.
SQL> select count(*) from t1;
行號       COUNT(*)
---------- --------------------
1          200
已用時間: 1.345(毫秒). 執行號:46.

3.使用資料庫備份還原表空間
使用資料庫備份還原表空間可以快速還原一個或多個表空間,而不影響資料庫中其他的表空間和物件。在資料庫中僅有特定的表空間損壞且沒有表空間備份的情況下,可以選擇使用此種方式還原。
具體步驟如下:
1) 配置歸檔。
2) 保證資料庫處於OPEN或MOUNT狀態。
3) 建立資料庫完全備份。

SQL> backup database full to db_jydm_full_bak backupset 'E:\dmdbms\backup\ts_jydm_full_bak';
操作已執行
已用時間: 00:00:01.198. 執行號:50.

4) 校驗表空間備份。此步驟為可選,如果確定備份檔案合法可不進行備份校驗。

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

5) 修改表空間為離線。

SQL> alter tablespace main offline;
操作已執行
已用時間: 96.596(毫秒). 執行號:52.

6) 還原表空間。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_jydm_full_bak';
操作已執行
已用時間: 326.842(毫秒). 執行號:53.

7) 修改表空間為聯機。

SQL> alter tablespace main online;
操作已執行
已用時間: 17.338(毫秒). 執行號:54.
SQL> select count(*) from t1;
行號       COUNT(*)
---------- --------------------
1          200
已用時間: 1.969(毫秒). 執行號:55.


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

相關文章