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

由于篇幅太长,另外的测试过程就不贴了。

原文地址:https://www.cnblogs.com/hehe520/p/6330687.html