1. 程式人生 > >資料庫不能開啟,沒有備份處理方法之一強行開啟

資料庫不能開啟,沒有備份處理方法之一強行開啟

 由於企業的資料庫人員經驗不足,或是根本沒有dba,因此,可能會出現資料癱瘓,資料庫不能開啟但是又沒有備份的現象,那麼我們可能有兩種方法:

 a,資料庫強行開啟;

 b,使用oracle dul工具來把資料抽取出來

 這篇文章簡述一下如果資料庫不能開啟強行開啟的方法

1 .把init檔案中的:
undo_management=manual

3、在init.ora中加入如下引數

_allow_resetlogs_corruption=TRUE
_corrupted_rollback_segments=(_syssmu1$,_syssmu2$,_syssmu3$,_syssmu4$,_syssmu5$,_syssmu6$,_syssmu7$,_syssmu8$,_syssmu9$,_syssmu10$,_syssmu11$,_syssmu12$,_syssmu13$,_syssmu14$,_syssmu15$,_syssmu16$,_syssmu17$,_syssmu18$,_syssmu19$,_syssmu20$,_syssmu21$,_syssmu22$,_syssmu23$,_syssmu24$,_syssmu25$,_syssmu26$,_syssmu27$,_syssmu28$,_syssmu29$,_syssmu30$,_syssmu31$,_syssmu32$,_syssmu33$)
可以先嚐試使用_offline_rollback_segments=true,因為這個不會破壞回滾段。

如果不行再使用_corrupted_rollback_segments
4.然後啟動資料庫到mount狀態
recover database until cancel
5.alter database open resetlogs;

由於資料庫是不一致方式開啟,因此,開啟後把資料庫的資料使用exp或是expdp匯出來,然後重新建立資料庫,然後匯入資料

在開啟的時候可能會報ora-600[2662]錯誤,那麼需要如下辦法處理

ORA-600 [2662]"Block SCN is ahead of Current SCN",說明當前資料庫的資料塊的SCN早於當前的SCN,主要是和儲存在UGA變數中的

dependent SCN進行比較,如果當前的SCN小於它,資料庫就會產生這個ORA-600 [2662]的錯誤了。這個錯誤一共有五個引數,分別代表不同的含義,

ORA-600 [2662] [a][b] [c] [d] [e]

Arg [a] Current SCNWRAP

Arg [b] Current SCNBASE

Arg [c] dependentSCN WRAP

Arg [d] dependentSCN BASE

Arg [e] Where present this is theDBA where the dependent SCN came from.

ORA-00600: internal error code, arguments: [2662], [0], [

431267936], [0], [431273216], [0], [], []

說明資料檔案的scn高於redoscn

此時只有把redoscn一直往前追趕

兩種辦法:

如果差別少,那麼新增上邊兩個隱含引數,然後重複去open resetlogs,如下

A.新增引數

_allow_resetlogs_corruption=TRUE

_corrupted_rollback_segments=(_syssmu1$,_syssmu2$,_syssmu3$,_syssmu4$,_syssmu5$,_syssmu6$,_syssmu7$,_syssmu8$,_syssmu9$,_syssmu10$,_syssmu11$,_syssmu12$,_syssmu13$,_syssmu14$,_syssmu15$,_syssmu16$,_syssmu17$,_syssmu18$,_syssmu19$,_syssmu20$,_syssmu21$,_syssmu22$,_syssmu23$,_syssmu24$,_syssmu25$,_syssmu26$,_syssmu27$,_syssmu28$,_syssmu29$,_syssmu30$,_syssmu31$,_syssmu32$,_syssmu33$)

B回覆資料庫

Sql>recoverdatabase until cancel using backup controlfile ;

Cancel

A.        開啟資料庫

Sql>alterdatabase open resetlogs;

嘗試多次,直到開啟為止

如果差別多,通過新增adjust_scn來開啟,如下:

Oracle 10g以後,需要增加此引數

*._allow_error_simulation=true

如果資料庫mount狀態下做:

 alter session set events '10015 trace nameadjust_scn level 1';

如果資料庫開啟:

alter session set events'IMMEDIATE trace name ADJUST_SCN level 1';