RMAN> backup current controlfile;
我是想在rman下備份controlfile,然后rman下restore,可是事實證明不行
1 我在RMAN中用 backup current controlfile format 'c:ctl.bak' 備份了控制文件,
說明:format可將控制文件備份到指定位置,否則OMF到“E:\app\xs\flash_recovery_area\jsce\BACKUPSET\2013_01_27”
2 關閉庫,然后把所有控制文件都刪了,
3 Startup nomout庫,
4 在RMAN中用 restore controlfile from 'c:ctl.bak' 恢復了空制文件,
然后就有問題了,
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
RMAN> alter database open RESETLOGS;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: alter db 命令 (在 01/27/2013 20:03:40 上) 失敗
ORA-01152: 文件 1 沒有從過舊的備份中還原
ORA-01110: 數據文件 1: 'E:\APP\XS\ORADATA\JSCE\SYSTEM01.DBF'
解決:
數據文件頭部start scn比控制文件記錄的數據庫文件頭部SCN要新,那么就要使用日志(包括歸檔日志+聯機重做日志)前推控制文件的記錄的數據庫頭部SCN與數據文件start scn一致,就能保證打開數據庫。
因為是使用備份的控制文件恢復數據庫,那么就必須alter database open resetlogs打開數據庫
恢復如下步驟:
a.restore controlfile from '/u01/app/oradata/ctl.ctl' from '/bak/xxxx.bak';
b.alter database mount;
c.recover database using backup controlfile until cancel;
注意:這一步,因為備份的控制文件沒有記錄聯機重做日志文件的scn,這里需要手動輸入redo文件來取消恢復.
這個時候就不是rman恢復了,只要在sql下,recover database using backup controfile until cancel,然后應用你的那些歸檔日志就可以了。
很簡單。
d .alter database open resetlogs;
SYS@jsce>recover database using backup controlfile until cancel;
ORA-00279: 更改 3328772 (在 01/27/2013 18:35:35 生成) 對於線程 1 是必需的
ORA-00289: 建議: E:\APP\XS\FLASHBACK_RECOVERY_AREAARC0000000021_0804733320.0001
ORA-00280: 更改 3328772 (用於線程 1) 在序列 #21 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\app\xs\oradata\jsce\REDO01.LOG
已應用的日志。
完成介質恢復。
SYS@jsce>alter database open resetlogs;
數據庫已更改。