在STANDBY数据库利用RMAN恢复主库上EXCLUDE的只读表空间,碰到了问题。



数据库恢复完成,但是恢复被主库EXCLUDE的只读表空间时,发现无法进行恢复:

RMAN> restore tablespace clubstat2_bak;

Starting restore at 14-FEB-11

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=1094 devtype=DISK

file 22 is excluded from whole database backup

file 25 is excluded from whole database backup

file 28 is excluded from whole database backup

file 30 is excluded from whole database backup

restore not done; all files readonly, offline, or already restored

Finished restore at 14-FEB-11

对于主库而言很简单,只需要利用rman的configure exclude clear命令就可以解决这个问题,但是对于STANDBY数据库而言,这个方法不可行:

RMAN> show exclude;

RMAN configuration parameters are:

CONFIGURE EXCLUDE FOR TABLESPACE 'CLUBSTAT2_BAK';

RMAN> configure exclude for tablespace 'CLUBSTAT2_BAK' clear;

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of configure command at 02/14/2011 00:07:48

RMAN-05021: this configuration cannot be changed for a BACKUP or STANDBY control file

错误信息很明确,当前控制文件是STANDBY控制文件,因此无法运行CONFIGURE EXCLUDE命令。

有一个简单的解决方法,就是在主库运行CONFIGURE EXCLUDE FOR TABLESPACE ‘CLUBSTAT2_BAK’ CLEAR命令,然后创建STANDBY CONTROLFILE,利用新创建的STANDBY控制文件恢复这个只读表空间。

但是由于当前目标数据库使用的是ASM,在恢复其他数据文件的时候,新建的数据文件名称和主库的名称并不相同,这些新的名称已经写到控制文件中了,如果使用新的控制文件,还需要手工RENAME所有的数据文件。当然也可以利用新的控制文件恢复只读表空间后,在换回原始的控制文件,不过这种方法就显得相对毕竟麻烦,也容易出错。

最后选择了利用RMAN在主库COPY DATAFILE的方法,生成数据文件的拷贝,将数据文件拷贝ftp到备库中利用catalog datafilecopy命令将数据文件拷贝添加到控制文件中,然后利用copy datafilecopy命令将只读表空间的数据文件拷贝到asm中指定的位置,从而变相的完成了只读表空间的恢复。




oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html