使用Disql執行表空間還原的複雜用法

eric0435發表於2020-08-14

下面將介紹一些不常用且較複雜的還原場景。主要內容包括:
1. 指定歸檔目錄還原
2. 還原表空間中指定的資料檔案
3. 指定對映檔案還原

1.指定歸檔目錄還原
由於磁碟空間的影響,伺服器歸檔可能出現分佈在多個目錄的情況。出現這種情況時就需要指定歸檔目錄還原。還原時指定多個歸檔目錄的操作步驟如下:
1) 備份使用者表空間MAIN。

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

2) 校驗備份。此步驟可選。

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

3) 還原使用者表空間MAIN。假設歸檔日誌分佈在目錄為E:\dmdbms\data\arch和E:\dmdbms\data\arch1兩個目錄下。

SQL> alter tablespace main offline;
操作已執行
已用時間: 111.415(毫秒). 執行號:82.
SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak_for_arch' with backupdir 'E:\dmdbms\data\arch','E:\dmdbms\data\arch1';
操作已執行
已用時間: 414.930(毫秒). 執行號:83.
SQL> alter tablespace main online;
操作已執行
已用時間: 27.742(毫秒). 執行號:84.

2.還原表空間中指定的資料檔案
DM7不僅支援從資料庫備份和表空間備份中還原表空間,還支援還原表空間中特定的資料檔案。若表空間已經被破壞,則不允許執行特定資料檔案的還原。使用資料庫備份還原表空間或表空間中的資料檔案與使用表空間備份操作類似,區別在於RESTORE語句中指定的備份集為資料庫備份集。因此,本節僅以使用表空間備份為例說明還原資料檔案的操作步驟。
1) 建立待備份的表空間TS_FOR_RES_01, 並在庫目錄下建立3個資料檔案。

SQL> create tablespace ts_for_res_01 datafile 'ts_for_res_01_01.dbf' size 128;
操作已執行
已用時間: 83.275(毫秒). 執行號:87.
SQL> alter tablespace ts_for_res_01 add datafile 'ts_for_res_01_02.dbf' size 128;
操作已執行
已用時間: 38.806(毫秒). 執行號:88.
SQL> alter tablespace ts_for_res_01 add datafile 'ts_for_res_01_03.dbf' size 128;
操作已執行
已用時間: 42.169(毫秒). 執行號:89.

2) 備份表空間。

SQL> backup tablespace ts_for_res_01 backupset 'E:\dmdbms\backup\ts_for_res_01_bak';
操作已執行
已用時間: 00:00:01.161. 執行號:93.

3) 查詢資料檔案的檔案編號或路徑。還原指定的資料檔案需知道資料檔案對應的檔案編號或路徑,相關資訊可透過查詢動態檢視V$DATAFILE獲取。

SQL> select group_id,id,path from v$datafile;
行號       GROUP_ID    ID          PATH
---------- ----------- ----------- ----------------------------------------
1          0           0           E:\dmdbms\data\jydm\SYSTEM.DBF
2          1           0           E:\dmdbms\data\jydm\ROLL.DBF
3          3           0           E:\dmdbms\data\jydm\TEMP.DBF
4          4           0           E:\dmdbms\data\jydm\MAIN.DBF
5          5           0           E:\dmdbms\data\jydm\BOOKSHOP.DBF
6          6           0           E:\dmdbms\data\jydm\DMHR.DBF
7          7           0           E:\dmdbms\data\jydm\ts_for_res_01_01.dbf
8          7           1           E:\dmdbms\data\jydm\ts_for_res_01_02.dbf
9          7           2           E:\dmdbms\data\jydm\ts_for_res_01_03.dbf
9 rows got
已用時間: 1.655(毫秒). 執行號:94.

如果想還原ts_for_res_01_02.dbf和ts_for_res_01_03.dbf兩個資料檔案,透過查詢結果可知它們的檔案編號(1和2)以及相應的路徑。

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

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

5) 透過檔案編號還原表空間TS_FOR_RES_01中的資料檔案ts_for_res_01_02.dbf和ts_for_res_01_03.dbf。

SQL> alter tablespace ts_for_res_01 offline;
操作已執行
已用時間: 105.157(毫秒). 執行號:96.
SQL> restore tablespace ts_for_res_01 datafile 1,2 from backupset 'E:\dmdbms\backup\ts_for_res_01_bak';
操作已執行
已用時間: 358.862(毫秒). 執行號:97.

如果不想使用檔案編號還原,使用指定資料檔案路徑還原資料檔案的語句如下:

SQL> restore tablespace ts_for_res_01 datafile 'E:\dmdbms\data\jydm\ts_for_res_01_02.dbf','E:\dmdbms\data\jydm\ts_for_res_01_03.dbf' from backupset 'E:\dmdbms\backup\ts_for_res_01_bak';
操作已執行
已用時間: 344.008(毫秒). 執行號:98.
SQL> alter tablespace ts_for_res_01 online;
操作已執行
已用時間: 24.644(毫秒). 執行號:99.

3.指定對映檔案還原
對映檔案用於指定存放還原目標路徑,即備份集裡面的資料檔案路徑。指定對映檔案還原可以重新指定備份集中資料檔案的路徑。下面以MAIN表空間為例說明如何使用對映檔案還原。
1) 備份MAIN表空間。

SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_map';

2) 使用DMRMAN的DUMP命令生成對映檔案ts_bak_mapped.txt,存至'E:\dmdbms\backup\目錄。檔案中指定資料檔案MAIN.DBF還原後的路徑為E:\dmdbms\data\jydm\MAIN.DBF。

RMAN> dump backupset  'E:\dmdbms\backup\ts_main_bak_for_map'  device type disk mapped file  'E:\dmdbms\backup\ts_bak_mapped.txt';
dump backupset 'E:\dmdbms\backup\ts_main_bak_for_map' device type disk mapped file 'E:\dmdbms\backup\ts_bak_mapped.txt';
dump mapped file successfully.
time used: 28.360(ms)
/**************************************************************/
/***  Delete the unnecessary modified groups                 **/
/***  Modify the data_path or mirror_path only in one group  **/
/**************************************************************/
/**=============================================================**/
/*[jydm_MAIN_FIL_0]*/
fil_id         = 0
ts_id          = 4
ts_name        = MAIN
data_path      = E:\dmdbms\data\jydm\MAIN.DBF
mirror_path    =
/***************************** END ****************************/

3) 還原MAIN表空間。

SQL> alter tablespace main offline;
操作已執行
已用時間: 119.506(毫秒). 執行號:102.
SQL> select * from tab_for_res_2;
select * from tab_for_res_2;
[-3408]:表空間[MAIN]處於離線狀態.
已用時間: 1.372(毫秒). 執行號:0.
SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak_for_map' mapped file 'E:\dmdbms\backup\ts_bak_mapped.txt';
操作已執行
已用時間: 377.253(毫秒). 執行號:104.
SQL> alter tablespace main online;
操作已執行
已用時間: 17.211(毫秒). 執行號:105.
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
已用時間: 2.604(毫秒). 執行號:106.


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

相關文章