初試Oracle的RMAN異地異系統恢復…………失敗…………

louloueva發表於2009-01-05

昨天沒有看什麼具體的知識點
而是去試驗了一下RMAN的恢復

從朋友那邊得到了一份測試資料庫的完全備份集(其實還不夠完全)
想在自己這邊試驗看看能不能恢復回去
先從朋友那邊拿到三個控制檔案(其實這個時候應該意識到問題的……)
再讓他通過spfile建立pfile
至此,一切準備工作就緒(我以為的就緒……)

先在Linux下export ORACLE_SID=資料庫SID
然後手動建立相應資料庫目錄(bdump、pfile等)
設定相應的Tnsname和listener,可以利用netmgr設定
或拷貝現有項,加以簡單修改(也就是改改SID什麼的)
通過SqlPlus連線新建的ORACLE_SID(這時候是可以連線的)
因為自己已經將control檔案拷貝到相應目錄
所以啟動資料庫到mount狀態,startup mount
(其實……這裡可能不是正確的)
在mount狀態下,開始利用備份檔案恢復資料檔案到新的位置
在SqlPlus下執行下面的PL/SQL塊
DECLARE
devtype varchar2(256);
done boolean;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1');
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restorecontrolfileto

(cfname=>'/home/oracle/oracle/oradata/dagl/control01.ctl');
sys.dbms_backup_restore.restorecontrolfileto

(cfname=>'/home/oracle/oracle/oradata/dagl/control02.ctl');
sys.dbms_backup_restore.restorecontrolfileto

(cfname=>'/home/oracle/oracle/oradata/dagl/control03.ctl');
sys.dbms_backup_restore.restoredatafileto

(dfnumber=>01,toname=>'/home/oracle/oracle/oradata/dagl/system01.dbf');
sys.dbms_backup_restore.restoredatafileto

(dfnumber=>02,toname=>'/home/oracle/oracle/oradata/dagl/undotbs01.dbf');
sys.dbms_backup_restore.restoredatafileto

(dfnumber=>03,toname=>'/home/oracle/oracle/oradata/dagl/sysaux01.dbf');
sys.dbms_backup_restore.restoredatafileto

(dfnumber=>04,toname=>'/home/oracle/oracle/oradata/dagl/user01.dbf');
sys.dbms_backup_restore.restoredatafileto

(dfnumber=>05,toname=>'/home/oracle/oracle/oradata/dagl/example01.dbf');
sys.dbms_backup_restore.restoredatafileto

(dfnumber=>06,toname=>'/home/oracle/oracle/oradata/dagl/dagl');
sys.dbms_backup_restore.restoredatafileto

(dfnumber=>07,toname=>'/home/oracle/oracle/oradata/dagl/rman01.dbf');
sys.dbms_backup_restore.restoreBackupPiece

(done=>done,handle=>'/home/oracle/oracle/oradata/dagl/B7K3BN2E_1_1',

params=>null);
sys.dbms_backup_restore.deviceDeallocate;
END;
/

上面的路徑和檔名根據不同資料庫,作相應修改
經過這些步驟,就能看到,資料檔案已經恢復到相應目錄了
我在這個時候,準備open資料庫
alter database open;
錯誤就在這裡出現了………………
提示system表空間需要restore ◎◎
去RMAN下,rman target sys/sys@dagl as sysdba
執行,restore database;
執行過程中,發現還在尋找windows路徑下的備份檔案……
而找了半天資料,也沒找到怎麼去改這個資訊……
後來發現,control檔案中可能會包含備份檔案資訊
(因為朋友的RMAN沒有catalog,所以RMAN會自動用control檔案替代catalog)
另外,出現system需要restore提示,可能是control檔案中的SCN和資料檔案不一致
所以,就猜想,這三個控制檔案,可能不是生成備份檔案時候的
而且RMAN備份的時候,可以選擇包含控制檔案
另外,在恢復了資料檔案後,可能還需要到RMAN下set newname
set newname for datafile 1 to '/home/oracle/oracle/oradata/dagl/system01.dbf';
之後,switch datafile 1;
但目前無法試驗正確與否

看來試驗只能先暫時到此……
回頭告訴朋友一聲,讓他按照我這個步驟走走
看能不能在他的兩臺同系統下,完成恢復吧

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/556359/viewspace-526727/,如需轉載,請註明出處,否則將追究法律責任。

相關文章