RESTORE DATAFILE TO A NEW LOCATION
如果存储datafile的磁盘坏了,这个时候就可能将数据文件还原到别的磁盘,然后进行恢复。
恢复之前,首先检查是否设置了db_create_file_dest,如果设置了这个参数,那么rman默认的会将datafile恢复到db_create_file_dest指定的目录中,而这个时候由于db_create_file_dest指定的目录所在的磁盘损坏,可能导致恢复不成功。
这个时候我们可以将db_create_file_dest参数去掉然后使用如下示例脚本将数据文件恢复到一个新目录
run
{
set newname for datafile 1 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE2/O1_MF_SYSTEM_5H1XWSC9_.DBF'; ----如果没有将db_create_file_dest参数禁用,这语句无效
set newname for datafile 2 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE2/O1_MF_UNDOTBS1_5H1XWSNJ_.DBF';
set newname for datafile 3 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE2/O1_MF_SYSAUX_5H1XWSF1_.DBF';
set newname for datafile 4 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE2/O1_MF_USERS_5H1XWSOD_.DBF';
set newname for datafile 5 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE2/O1_MF_ROBINSON_5H248YWC_.DBF';
restore database;
switch datafile all;
recover database;
alter database open;
}
或者更改db_create_file_dest参数,将其指定到一个新磁盘目录中,然后使用如下示例脚本恢复
run
{
set newname for datafile 1 to new; ---通过使用new关键字,rman会将datafile 1还原到db_create_file_dest指定目录
set newname for datafile 2 to new;
set newname for datafile 3 to new;
set newname for datafile 4 to new;
set newname for datafile 5 to new;
restore database;
switch datafile all;
recover database;
alter database open;
}
下面是测试步骤
SQL> select name from v$datafile; ---数据文件存放在C:/ORACLE/PRODUCT/10.2./STORAGE/ROBINSON/DATAFILE/目录中
NAME
--------------------------------------------------------------------------------
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H26LJMP_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H26LJQB_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H26LJNY_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_USERS_5H26LJV1_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H26LJPY_.DBF
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string C:/oracle/product/10.2.0/storage
RMAN> shutdown immediate;
数据库已关闭
数据库已卸载
Oracle 实例已关闭
RMAN> startup mount;
数据库已经启动
RMAN> run
2> {
3> set newname for datafile 1 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H1XWSC9_.DBF';
4> set newname for datafile 2 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H1XWSNJ_.DBF';
5> set newname for datafile 3 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H1XWSF1_.DBF';
6> set newname for datafile 4 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE/O1_MF_USERS_5H1XWSOD_.DBF';
7> set newname for datafile 5 to 'C:/oracle/product/10.2.0/oradata/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H248YWC_.DBF';
8> restore database;
9> switch datafile all;
10> recover database;
11> alter database open;
12> }
正在执行命令: SET NEWNAME
使用目标数据库控制文件替代恢复目录
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 04-11月-09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
通道 ORA_DISK_1: 正在恢复数据文件00001
输入数据文件副本 recid=56 stamp=702050992 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H267
数据文件 00001 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H1XWSC9_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00002
输入数据文件副本 recid=57 stamp=702050992 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H2
数据文件 00002 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H1XWSNJ_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00003
输入数据文件副本 recid=58 stamp=702050993 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H267
数据文件 00003 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H1XWSF1_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00004
输入数据文件副本 recid=59 stamp=702050993 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H2678
数据文件 00004 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H1XWSOD_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00005
输入数据文件副本 recid=60 stamp=702050993 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H2
数据文件 00005 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H248YWC_.DBF
故障转移到上一个备份
通道 ORA_DISK_1: 正在恢复数据文件00001
输入数据文件副本 recid=21 stamp=702049822 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H254
数据文件 00001 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H1XWSC9_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00002
输入数据文件副本 recid=22 stamp=702049822 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H2
数据文件 00002 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H1XWSNJ_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00003
输入数据文件副本 recid=23 stamp=702049822 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H254
数据文件 00003 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H1XWSF1_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00004
输入数据文件副本 recid=24 stamp=702049823 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H2542
数据文件 00004 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H1XWSOD_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00005
输入数据文件副本 recid=25 stamp=702049823 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H2
数据文件 00005 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H248YWC_.DBF
故障转移到上一个备份
通道 ORA_DISK_1: 正在恢复数据文件00001
输入数据文件副本 recid=41 stamp=702050592 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE2/O1_MF_SYSTEM_5H1X
数据文件 00001 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H1XWSC9_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00002
输入数据文件副本 recid=42 stamp=702050592 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE2/O1_MF_UNDOTBS1_5H
数据文件 00002 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H1XWSNJ_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00003
输入数据文件副本 recid=43 stamp=702050592 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE2/O1_MF_SYSAUX_5H1X
数据文件 00003 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H1XWSF1_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00004
输入数据文件副本 recid=44 stamp=702050593 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE2/O1_MF_USERS_5H1XW
数据文件 00004 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H1XWSOD_.DBF
通道 ORA_DISK_1: 正在恢复数据文件00005
输入数据文件副本 recid=45 stamp=702050593 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE2/O1_MF_ROBINSON_5H
数据文件 00005 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H248YWC_.DBF
故障转移到上一个备份
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H1XWSC9_.DBF
正将数据文件00002恢复到C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H1XWSNJ_.DBF
正将数据文件00003恢复到C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H1XWSF1_.DBF
正将数据文件00004恢复到C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H1XWSOD_.DBF
正将数据文件00005恢复到C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H248YWC_.DBF
通道 ORA_DISK_1: 正在读取备份段 C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/ROBINSON/BACKUPSET/2009_11_04/O1_MF_NNNDF
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/ROBINSON/BACKUPSET/2009_11_04/O1_MF_NNNDF_ROBINSON_5H24D5QY_.BKP
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:35
完成 restore 于 04-11月-09
数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=66 stamp=702052443 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H27Z
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=67 stamp=702052443 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H2
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=68 stamp=702052443 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H27Z
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=69 stamp=702052443 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_USERS_5H27ZW
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=70 stamp=702052443 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H2
启动 recover 于 04-11月-09
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:05
完成 recover 于 04-11月-09
数据库已打开
SQL> select name from v$datafile;--可以看到由于没有更改db_create_file_dest,无法将datafile还原到我们指定的目录
NAME
--------------------------------------------------------------------------------
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H27ZW3T_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H27ZW7J_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H27ZW51_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_USERS_5H27ZWCP_.DBF
C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H27ZW72_.DBF
SQL> alter system set db_create_file_dest='C:/oracle/product/10.2.0/oradata';
系统已更改。
RMAN> shutdown immediate;
数据库已关闭
数据库已卸载
Oracle 实例已关闭
RMAN> startup mount;
已连接到目标数据库 (未启动)
Oracle 实例已启动
数据库已装载
系统全局区域总计 612368384 字节
Fixed Size 1292036 字节
Variable Size 213911804 字节
Database Buffers 390070272 字节
Redo Buffers 7094272 字节
RMAN> run
2> {
3> set newname for datafile 1 to new;
4> set newname for datafile 2 to new;
5> set newname for datafile 3 to new;
6> set newname for datafile 4 to new;
7> set newname for datafile 5 to new;
8> restore database;
9> switch datafile all;
10> recover database;
11> alter database open;
12> }
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 04-11月-09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在恢复数据文件00001
输入数据文件副本 recid=71 stamp=702052444 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H26LJMP_.DBF
数据文件 00001 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_%U_.DBF
通道 ORA_DISK_1: 已复制数据文件 00001 的数据文件副本
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H28M6WT_.DBF recid=76 stamp=702053000
通道 ORA_DISK_1: 正在恢复数据文件00002
输入数据文件副本 recid=72 stamp=702052444 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H26LJQB_.DBF
数据文件 00002 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_%U_.DBF
通道 ORA_DISK_1: 已复制数据文件 00002 的数据文件副本
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H28NB1X_.DBF recid=77 stamp=702053006
通道 ORA_DISK_1: 正在恢复数据文件00003
输入数据文件副本 recid=73 stamp=702052444 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H26LJNY_.DBF
数据文件 00003 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_%U_.DBF
通道 ORA_DISK_1: 已复制数据文件 00003 的数据文件副本
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H28NK85_.DBF recid=78 stamp=702053047
通道 ORA_DISK_1: 正在恢复数据文件00004
输入数据文件副本 recid=74 stamp=702052444 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_USERS_5H26LJV1_.DBF
数据文件 00004 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_%U_.DBF
通道 ORA_DISK_1: 已复制数据文件 00004 的数据文件副本
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H28PKVW_.DBF recid=79 stamp=702053074
通道 ORA_DISK_1: 正在恢复数据文件00005
输入数据文件副本 recid=75 stamp=702052444 文件名=C:/ORACLE/PRODUCT/10.2.0/STORAGE/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H26LJPY_.DBF
数据文件 00005 的恢复目标: C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_%U_.DBF
通道 ORA_DISK_1: 已复制数据文件 00005 的数据文件副本
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H28PM03_.DBF recid=80 stamp=702053090
完成 restore 于 04-11月-09
数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=81 stamp=702053100 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H28M6WT_.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=82 stamp=702053100 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H28NB1X_.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=83 stamp=702053100 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H28NK85_.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=84 stamp=702053101 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H28PKVW_.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=85 stamp=702053101 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H28PM03_.DBF
启动 recover 于 04-11月-09
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:04
完成 recover 于 04-11月-09
数据库已打开
SQL> select name from v$datafile; ---可以看到数据文件已经resotore到了另外一个目录
NAME
--------------------------------------------------------------------------------
C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSTEM_5H28M6WT_.DBF
C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_UNDOTBS1_5H28NB1X_.DBF
C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_SYSAUX_5H28NK85_.DBF
C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_USERS_5H28PKVW_.DBF
C:/ORACLE/PRODUCT/10.2.0/ORADATA/ROBINSON/DATAFILE/O1_MF_ROBINSON_5H28PM03_.DBF
由于篇幅太长,另外的测试过程就不贴了。