恢複system資料表空間的資料檔案
system資料表空間存放著資料字典的資訊。當資料庫處於open狀態,如果system資料表空間所對應的資料檔案出現介質失敗,那麼當在其資料檔案上執行I/O操作時,資料庫會自動關閉;當資料庫處於關閉狀態時,如果system資料表空間所對應的資料檔案出現介質失敗,資料庫將不能開啟。
恢複system資料表空間必須在mount狀態下進行。
樣本一system資料表空間的資料檔案被誤刪除
備份資料庫。
刪除system資料表空間對應的資料檔案。
啟動資料庫到mount狀態。
使用restore datafile轉儲資料檔案,並使用recover datafile命令應用歸檔日誌,最後使用alter database open開啟資料庫。
- --備份資料庫(略)
- --刪除system資料表空間對應的資料檔案
- RMAN> host rm $Oracle_BASE/product/10.2.0/oradatabak/system01.dbf
- RMAN> startup
-
- connected to target database (not started)
- Oracle instance started
- database mounted
- RMAN-00571: ===========================================================
- RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
- RMAN-00571: ===========================================================
- RMAN-03002: failure of startup command at 08/22/2011 21:56:39
- ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
- ORA-01110: data file 1: '/oracle/10g/oracle/product/10.2.0/oradatabak/system01.dbf'
-
- SQL> select file#,error from v$recover_file;
-
- FILE# ERROR
- ---------- -----------------------------------------------------------------
- 1 FILE NOT FOUND
-
- SQL> select file#,name from v$datafile where file#=1;
-
- FILE# NAME
- ---------- ------------------------------------------------------------------------------------------------------------------------
- 1 /oracle/10g/oracle/product/10.2.0/oradatabak/system01.dbf
-
-
- --啟動資料庫到mount狀態並進行恢複
- RMAN> run {
- 2> startup force mount;
- 3> restore datafile 1;
- 4> recover datafile 1;
- 5> sql 'alter database open';
- 6> }
樣本二system資料表空間資料檔案所在磁碟出現故障
備份資料庫(略)
刪除system資料表空間對應的資料檔案。
啟動資料庫到mount狀態。
在restore database之前,執行set newname為資料檔案指定新的位置。
在restore database之後,執行switch datafile改變控制檔案中資料檔案位置和名稱。
之後通過執行recover database應用歸檔日誌。
最後執行alter database open開啟資料庫。
- --備份資料庫(略)
- --刪除system資料表空間對應的資料檔案
- RMAN> host 'rm /oracle/10g/oracle/product/10.2.0/oradatabak/system01.dbf'
- 2> ;
-
- --啟動資料庫到mount狀態並進行恢複(為資料檔案指定新位置,轉儲資料檔案,恢複資料檔案,開啟資料庫)
- RMAN> run {
- 2> startup force mount;
- 3> set newname for datafile 1 to '/oracle/10g/oracle/product/10.2.0/oradata/oralife/system01.dbf';
- 4> restore datafile 1;
- 5> switch datafile 1;
- 6> recover datafile 1;
- 7> sql 'alter database open';
- 8> }