在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中指定的位置,從而變相的完成了唯讀資料表空間的恢複。