概要
尝试从增量备份恢复数据库时,遇到如下错误:
RMAN> RECOVER DATABASE NOREDO;
Starting recover at 18 JUL 2011 18:12:10
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=267 devtype=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/18/2011 18:12:11
RMAN-06094: datafile 1 must be restored
此外,显示没有可用的数据文件副本可供使用。
RMAN> SWITCH DATABASE TO COPY;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of switch to copy command at 07/18/2011 17:10:17
RMAN-06571: datafile 1 does not have recoverable copy
Note: 尽管上述报告了datafile 1的错误,但这不一定是问题的全部。为了避免为每个受影响的文件打印错误消息(想象一下一个拥有五千个或更多数据文件的系统!),RMAN 只显示了第一个出现问题的文件。
解决方案
通常情况下,数据文件实际上存在于磁盘上,只是它们存放在不同的目录或使用不同的文件名。因此,您只需要告诉RMAN它们的实际位置即可。
1) 如果所有数据文件都位于相同的目录路径下,您可以使用一个命令将它们全部目录化(catalog):
RMAN> catalog start with 'full pathname';
否则,分别 catalog 每个数据文件:
RMAN> catalog datafilecopy 'full path filename';
2) 确认RMAN已经知道新目录化(catalog)的数据文件副本:
RMAN> list copy of database;
RMAN> list copy of datafile n;
eg.
RMAN> list copy of datafile 1;
OR to list multiple copies:
RMAN> list copy of datafile 1,2,3,4;
3) 将数据文件重命名为磁盘上正确的副本
a) 如果所有数据文件都需要重命名:
RMAN> switch database to copy;
b) 如果只需要重命名单个数据文件:
RMAN> switch datafile n to copy;
eg.
RMAN> switch datafile 1 to copy;
c) 如果需要重命名一组数据文件:
RMAN> switch datafile n,o,p,q to copy;
eg.
RMAN> switch datafile 1,2,3,4 to copy;
d) 重命名特定的副本:
RMAN> run {
switch datafile 'old datafile path and name' to datafilecopy 'new datafile path and name';
}
4) 现在控制文件应该反映出磁盘上真实的数据文件,包括它们的实际大小和名称。
RMAN> report schema;
File Size(MB) Tablespace RB segs Datafile Name
---- -------- ----------------- ------- ------------------------
1 500 SYSTEM *** <ASM PATH>/system.423.756840583
2 200 UNDOTBS1 *** <ASM PATH>/undotbs1.258.667475049
3 350 SYSAUX *** <ASM PATH>/sysaux.257.756996199
4 545 USERS *** <ASM PATH>/users.259.756996261
原因
主库与备库数据文件路径不同的情况下,重建备库控制文件会遇到 RMAN-06094 或 RMAN-06571 错误。
基于主库的控制文件重新创建备库控制文件,v$datafile 视图以及 RMAN 的 REPORT SCHEMA 命令显示主库的数据文件名,而不是备库的数据文件名。
RMAN> report schema;
请看 SIZE 和 NAME 列。SIZE 为 0 很好的说明了该文件实际不存在该磁盘上
例如:
File Size(MB) Tablespace RB segs Datafile Name
---- -------- ----------------- ------- ------------------------
1 0 SYSTEM *** <ASM PATH>/system.423.756840583
2 0 UNDOTBS1 *** <ASM PATH>/undotbs1.258.667475049
3 0 SYSAUX *** <ASM PATH>/sysaux.257.667475049
4 0 USERS *** <ASM PATH>/users.259.667475049
ASMCMD> ls -lt <PATH>/system.423.756840583
asmcmd: entry '<DB_NAME>' does not exist in directory '<DISKGROUP>/'
|