RMAN备份与恢复—将数据文件或表空间还原到新位置

来源:互联网 发布:淘宝披肩外套 编辑:程序博客网 时间:2024/05/01 03:00

1、将数据文件还原到新位置。当磁盘发生故障时,才会把数据未见恢复到其他位置。
首先删除数据文件,模拟磁盘故障,丢失数据文件。

[sql] view plaincopyprint?

  1. SQL> conn /as sysdba  
  2. 已连接。  
  3. SQL> ! rm -rf /u01/app/oracle/oradata/orcl/tb1.dbf  
  4.   
  5. SQL> conn u1/u1  
  6. 已连接。  
  7. SQL> select * from t;  
  8. select * from t  
  9.               *  
  10. 第 1 行出现错误:  
  11. ORA-01116: 打开数据库文件 5 时出错  
  12. ORA-01110: 数据文件 5: '/u01/app/oracle/oradata/orcl/tb1.dbf'  
  13. ORA-27041: 无法打开文件  
  14. Linux Error: 2: No such file or directory  
  15. Additional information: 3  


 

然后恢复

[sql] view plaincopyprint?

  1. RMAN> run {  
  2. 2> sql "alter database datafile 5 offline";  
  3. 3> set newname for datafile 5 to '/u01/app/oracle/datafile/tb1.dbf';  
  4. 4> restore datafile 5;  
  5. 5> switch datafile 5;  
  6. 6> recover datafile 5;  
  7. 7> sql "alter database datafile 5 online"; }  
  8.   
  9. sql 语句: alter database datafile 5 offline  
  10.   
  11. 正在执行命令: SET NEWNAME  
  12.   
  13. 启动 restore 于 12-10月-11  
  14. 分配的通道: ORA_DISK_1  
  15. 通道 ORA_DISK_1: sid=142 devtype=DISK  
  16.   
  17. 通道 ORA_DISK_1: 正在开始恢复数据文件备份集  
  18. 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件  
  19. 正将数据文件00005还原到/u01/app/oracle/datafile/tb1.dbf  
  20. 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp  
  21. 通道 ORA_DISK_1: 已还原备份片段 1  
  22. 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp 标记 = TAG20111012T144251  
  23. 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01  
  24. 完成 restore 于 12-10月-11  
  25.   
  26. 数据文件 5 已转换成数据文件副本  
  27. 输入数据文件副本 recid=7 stamp=764352437 文件名=/u01/app/oracle/datafile/tb1.dbf  
  28.   
  29. 启动 recover 于 12-10月-11  
  30. 使用通道 ORA_DISK_1  
  31.   
  32. 正在开始介质的恢复  
  33.   
  34. 通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复  
  35. 通道 ORA_DISK_1: 正在恢复存档日志  
  36. 存档日志线程 =1 序列=10  
  37. 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp  
  38. 通道 ORA_DISK_1: 已还原备份片段 1  
  39. 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp 标记 = TAG20111012T144328  
  40. 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01  
  41. 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bloq8c_.arc 线程 =1 序列 =10  
  42. 通道 default: 正在删除存档日志  
  43. 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bloq8c_.arc 记录 ID=11 时间戳 =764352439  
  44. 介质恢复完成, 用时: 00:00:01  
  45. 完成 recover 于 12-10月-11  
  46.   
  47. sql 语句: alter database datafile 5 online  

检查恢复结果
[sql] view plaincopyprint?

  1. SQL> conn u1/u1  
  2. 已连接。  
  3. SQL> select * from t;  
  4.   
  5.         ID VALUE  
  6. ---------- ------------------------------  
  7.          1 a  
  8.   
  9. SQL> conn /as sysdba  
  10. 已连接。  
  11.   
  12. SQL> select file_name from dba_data_files;  
  13.   
  14. FILE_NAME  
  15. --------------------------------------------------  
  16. /u01/app/oracle/oradata/orcl/users01.dbf  
  17. /u01/app/oracle/oradata/orcl/sysaux01.dbf  
  18. /u01/app/oracle/oradata/orcl/undotbs01.dbf  
  19. /u01/app/oracle/oradata/orcl/system01.dbf  
  20. /u01/app/oracle/datafile/tb1.dbf  

2、将表空间还原到新位置。

首先删除数据文件,模拟磁盘故障,丢失数据文件。(这次我打算将数据文件恢复到原地方。)
[sql] view plaincopyprint?

  1. SQL> ! rm -rf /u01/app/oracle/datafile/tb1.dbf  
  2.   
  3. SQL> conn u1/u1  
  4. 已连接。  
  5.   
  6. SQL> insert into t values(2,'b');  
  7. insert into t values(2,'b')  
  8.             *  
  9. 第 1 行出现错误:  
  10. ORA-01116: 打开数据库文件 5 时出错  
  11. ORA-01110: 数据文件 5: '/u01/app/oracle/datafile/tb1.dbf'  
  12. ORA-27041: 无法打开文件  
  13. Linux Error: 2: No such file or directory  
  14. Additional information: 3  

 

恢复

[sql] view plaincopyprint?
  1. RMAN> run {  
  2. 2> sql "alter tablespace tb1 offline immediate";  
  3. 3> set newname for datafile '/u01/app/oracle/datafile/tb1.dbf' to '/u01/app/oracle/oradata/orcl/tb1.dbf';  
  4. 4> restore tablespace tb1;  
  5. 5> switch datafile all;  
  6. 6> recover tablespace tb1;  
  7. 7> sql "alter tablespace tb1 online"; }  
  8.   
  9. sql 语句: alter tablespace tb1 offline immediate  
  10.   
  11. 正在执行命令: SET NEWNAME  
  12.   
  13. 启动 restore 于 12-10月-11  
  14. 使用通道 ORA_DISK_1  
  15.   
  16. 通道 ORA_DISK_1: 正在开始恢复数据文件备份集  
  17. 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件  
  18. 正将数据文件00005还原到/u01/app/oracle/oradata/orcl/tb1.dbf  
  19. 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp  
  20. 通道 ORA_DISK_1: 已还原备份片段 1  
  21. 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp 标记 = TAG20111012T144251  
  22. 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01  
  23. 完成 restore 于 12-10月-11  
  24.   
  25. 数据文件 5 已转换成数据文件副本  
  26. 输入数据文件副本 recid=9 stamp=764352980 文件名=/u01/app/oracle/oradata/orcl/tb1.dbf  
  27.   
  28. 启动 recover 于 12-10月-11  
  29. 使用通道 ORA_DISK_1  
  30.   
  31. 正在开始介质的恢复  
  32.   
  33. 通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复  
  34. 通道 ORA_DISK_1: 正在恢复存档日志  
  35. 存档日志线程 =1 序列=10  
  36. 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp  
  37. 通道 ORA_DISK_1: 已还原备份片段 1  
  38. 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp 标记 = TAG20111012T144328  
  39. 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01  
  40. 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bm6o60_.arc 线程 =1 序列 =10  
  41. 通道 default: 正在删除存档日志  
  42. 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bm6o60_.arc 记录 ID=12 时间戳 =764352981  
  43. 介质恢复完成, 用时: 00:00:03  
  44. 完成 recover 于 12-10月-11  
  45.   
  46. sql 语句: alter tablespace tb1 online  

 

验证恢复结果

[sql] view plaincopyprint?
  1. SQL> conn u1/u1  
  2. 已连接。  
  3. SQL> insert into t values(2,'b');  
  4.   
  5. 已创建 1 行。  
  6.   
  7. SQL> commit;  
  8.   
  9. 提交完成。  
  10.   
  11. SQL> select * from t;  
  12.   
  13.         ID VALUE  
  14. ---------- ------------------------------  
  15.          1 a  
  16.          2 b  

0 0