ORACLE只有表空間文件通過重建控制文件進行不完全恢復

最近公司在外面的一個數據庫服務器崩潰了。於是臨時恢復了一次數據庫。

最開始使用日誌文件來恢復,但是過程中發現日誌文件損壞了。

於是在網上找到了一些資料進行了重建控制文件進行不完全恢復。下面是這個過程。由於過程中沒有保存過程截圖,這裏只有一些步驟。

 

1、首先按照原來服務器上的路徑重新安裝ORACLE。

2、由於我們的表空間不在數據庫的ORADATA裏,所以通過語句重建了表空間文件。

3、在cmd下用sysdba登錄後,使用alter database backup controlfile to trace resetlog;導出控制文件。在udmp目錄下。

4、停服務。備份當前的ORADATA文件夾,然後清空當前ORADATA目錄,並把原來的備份拷貝到當前目錄下(只要DBF和ORA就可以了,日誌和控制文件不要)。清空ADMIN目錄下的各個文件夾內容,保留PFILE文件夾下的init.ora文件。

5、cmd下執行sqlplus /nolog,然後用conn as sysdba登錄

6、startup nomount

7、把第3步裏備份的創建控制文件的sql拷貝出來,保存爲d:/createcontrolfile.sql.

8、執行@d:/createcontrolfile.sql

9、shutdown immediate

10、關服務。

11、在admin/pfile目錄下的init.ora里加入隱含參數

_allow_resetlogs_corruption=true

_allow_terminal_recovery_corruption=true

12、執行startup pfile='amdin/pfile/init.ora(實際文件名和目錄按照實際走)' mount force;

13、執行alter database open resetlogs;

估計是不成功,然後也無法關閉數據庫了。

接着按照12條的語句啓動數據庫。

14、recover database;應該提示介質已恢復。

15、recover database until cancel;如果14已經成功,這條應該也成功,不成功也沒關係。

16、此時執行alter database open resetlogs;

查看trace,如果發現ora-00600 2662,則執行alter session set events '10015 trace name adjust_scn level 1(或者10)';

17、16執行完之後,如果alter database open restlogs;還是不成功,且變成600 4193,則需加入隱含參數:

_corrupted_rollback_segments=(_syssmu1$....._syssmu10$),具體要按照trace裏的undo數量而定。

18、現在會出現ORA-00604,不要着急,屏蔽掉上面的隱含參數後,修改隱含參數裏的undo_management=manual。

19、alter database open resetlog;應該就提示“數據庫已更改”,這樣就可以了。

20、如果要加入tempfile,執行alter tablespace TEMP add tempfile '目錄/temp01.ora' reuse;即可。

 

附:

如果錯誤顯示問號執行:alter session set nls_language=american;

清除日誌文件:alter database clear unarchived logfile group 1;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章