恢復之重建資料檔案

zhengbao_jun發表於2009-02-11

當碰到損壞的資料檔案沒有備份,或者備份檔案也被損壞的情況。如果資料庫是處於歸檔模式下,且保留著所有的從表空間建立時到現在的歸檔日誌,則可以通過重建資料檔案的方式進行恢復。


這種恢復方式首先建立一個新的空資料檔案,然後完全利用歸檔日誌來恢復表空間中的資料。

SQL> SELECT COUNT(*) FROM TEST;
SELECT COUNT(*) FROM TEST
*
ERROR 位於第 1 行:
ORA-00376: 此時無法讀取檔案 5
ORA-01110: 資料檔案 5: 'F:ORACLEORADATATESTUSERS01.DBF'


SQL> SELECT * FROM V$RECOVER_FILE;

FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- -------------------- ---------- -------------------
5 OFFLINE OFFLINE 45089058 2006-02-08 20:33:06

SQL> SELECT D.NAME, T.NAME AS TABLESPACE_NAME
2 FROM V$DATAFILE D, V$TABLESPACE T
3 WHERE T.TS# = D.TS#
4 AND D.FILE# = 5;

NAME TABLESPACE_NAME
---------------------------------------- ------------------------------
F:ORACLEORADATATESTUSERS01.DBF USERS

SQL> ALTER DATABASE CREATE DATAFILE 'F:ORACLEORADATATESTUSERS01.DBF'
2 AS 'F:ORACLEORADATATESTUSERS02.DBF';

資料庫已更改。

SQL> RECOVER DATAFILE 'F:ORACLEORADATATESTUSERS02.DBF';
ORA-00279: 更改 45038775 (在 02/08/2006 01:49:56 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00026.001
ORA-00280: 更改 45038775 對於執行緒 1 是按序列 # 26 進行的


指定日誌: {=suggested | filename | AUTO | CANCEL}
AUTO
已應用的日誌。
完成介質恢復。
SQL> ALTER DATABASE DATAFILE 'F:ORACLEORADATATESTUSERS02.DBF' ONLINE;

資料庫已更改。

SQL> SELECT COUNT(*) FROM TEST;

COUNT(*)
----------
6288

這個操作需要注意的是:需要表空間建立後所有的歸檔日誌,且控制檔案中必須包含受損檔名。另外,這種方式的恢復不能用於SYSTEM表空間。

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

相關文章