下面将介绍一些不常用且较复杂的还原场景。主要内容包括:
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.