1、将数据文件还原到新位置。当磁盘发生故障时,才会把数据未见恢复到其他位置。
首先删除数据文件,模拟磁盘故障,丢失数据文件。
[sql] view plaincopyprint?
- SQL> conn /as sysdba
- 已连接。
- SQL> ! rm -rf /u01/app/oracle/oradata/orcl/tb1.dbf
- SQL> conn u1/u1
- 已连接。
- SQL> select * from t;
- select * from t
- *
- 第 1 行出现错误:
- ORA-01116: 打开数据库文件 5 时出错
- ORA-01110: 数据文件 5: '/u01/app/oracle/oradata/orcl/tb1.dbf'
- ORA-27041: 无法打开文件
- Linux Error: 2: No such file or directory
- Additional information: 3
然后恢复
[sql] view plaincopyprint?
- RMAN> run {
- 2> sql "alter database datafile 5 offline";
- 3> set newname for datafile 5 to '/u01/app/oracle/datafile/tb1.dbf';
- 4> restore datafile 5;
- 5> switch datafile 5;
- 6> recover datafile 5;
- 7> sql "alter database datafile 5 online"; }
- sql 语句: alter database datafile 5 offline
- 正在执行命令: SET NEWNAME
- 启动 restore 于 12-10月-11
- 分配的通道: ORA_DISK_1
- 通道 ORA_DISK_1: sid=142 devtype=DISK
- 通道 ORA_DISK_1: 正在开始恢复数据文件备份集
- 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
- 正将数据文件00005还原到/u01/app/oracle/datafile/tb1.dbf
- 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp
- 通道 ORA_DISK_1: 已还原备份片段 1
- 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp 标记 = TAG20111012T144251
- 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
- 完成 restore 于 12-10月-11
- 数据文件 5 已转换成数据文件副本
- 输入数据文件副本 recid=7 stamp=764352437 文件名=/u01/app/oracle/datafile/tb1.dbf
- 启动 recover 于 12-10月-11
- 使用通道 ORA_DISK_1
- 正在开始介质的恢复
- 通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复
- 通道 ORA_DISK_1: 正在恢复存档日志
- 存档日志线程 =1 序列=10
- 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp
- 通道 ORA_DISK_1: 已还原备份片段 1
- 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp 标记 = TAG20111012T144328
- 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
- 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bloq8c_.arc 线程 =1 序列 =10
- 通道 default: 正在删除存档日志
- 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bloq8c_.arc 记录 ID=11 时间戳 =764352439
- 介质恢复完成, 用时: 00:00:01
- 完成 recover 于 12-10月-11
- sql 语句: alter database datafile 5 online
检查恢复结果
[sql] view plaincopyprint?
- SQL> conn u1/u1
- 已连接。
- SQL> select * from t;
- ID VALUE
- ---------- ------------------------------
- 1 a
- SQL> conn /as sysdba
- 已连接。
- SQL> select file_name from dba_data_files;
- FILE_NAME
- --------------------------------------------------
- /u01/app/oracle/oradata/orcl/users01.dbf
- /u01/app/oracle/oradata/orcl/sysaux01.dbf
- /u01/app/oracle/oradata/orcl/undotbs01.dbf
- /u01/app/oracle/oradata/orcl/system01.dbf
- /u01/app/oracle/datafile/tb1.dbf
2、将表空间还原到新位置。
首先删除数据文件,模拟磁盘故障,丢失数据文件。(这次我打算将数据文件恢复到原地方。)
[sql] view plaincopyprint?
- SQL> ! rm -rf /u01/app/oracle/datafile/tb1.dbf
- SQL> conn u1/u1
- 已连接。
- SQL> insert into t values(2,'b');
- insert into t values(2,'b')
- *
- 第 1 行出现错误:
- ORA-01116: 打开数据库文件 5 时出错
- ORA-01110: 数据文件 5: '/u01/app/oracle/datafile/tb1.dbf'
- ORA-27041: 无法打开文件
- Linux Error: 2: No such file or directory
- Additional information: 3
恢复
- RMAN> run {
- 2> sql "alter tablespace tb1 offline immediate";
- 3> set newname for datafile '/u01/app/oracle/datafile/tb1.dbf' to '/u01/app/oracle/oradata/orcl/tb1.dbf';
- 4> restore tablespace tb1;
- 5> switch datafile all;
- 6> recover tablespace tb1;
- 7> sql "alter tablespace tb1 online"; }
- sql 语句: alter tablespace tb1 offline immediate
- 正在执行命令: SET NEWNAME
- 启动 restore 于 12-10月-11
- 使用通道 ORA_DISK_1
- 通道 ORA_DISK_1: 正在开始恢复数据文件备份集
- 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
- 正将数据文件00005还原到/u01/app/oracle/oradata/orcl/tb1.dbf
- 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp
- 通道 ORA_DISK_1: 已还原备份片段 1
- 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_nnndf_TAG20111012T144251_79bfqccl_.bkp 标记 = TAG20111012T144251
- 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
- 完成 restore 于 12-10月-11
- 数据文件 5 已转换成数据文件副本
- 输入数据文件副本 recid=9 stamp=764352980 文件名=/u01/app/oracle/oradata/orcl/tb1.dbf
- 启动 recover 于 12-10月-11
- 使用通道 ORA_DISK_1
- 正在开始介质的恢复
- 通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复
- 通道 ORA_DISK_1: 正在恢复存档日志
- 存档日志线程 =1 序列=10
- 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp
- 通道 ORA_DISK_1: 已还原备份片段 1
- 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_12/o1_mf_annnn_TAG20111012T144328_79bfrkcf_.bkp 标记 = TAG20111012T144328
- 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
- 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bm6o60_.arc 线程 =1 序列 =10
- 通道 default: 正在删除存档日志
- 存档日志文件名 =/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_12/o1_mf_1_10_79bm6o60_.arc 记录 ID=12 时间戳 =764352981
- 介质恢复完成, 用时: 00:00:03
- 完成 recover 于 12-10月-11
- sql 语句: alter tablespace tb1 online
验证恢复结果
- SQL> conn u1/u1
- 已连接。
- SQL> insert into t values(2,'b');
- 已创建 1 行。
- SQL> commit;
- 提交完成。
- SQL> select * from t;
- ID VALUE
- ---------- ------------------------------
- 1 a
- 2 b