當前詳細報錯已經沒有了,只有相應圖。參考EYGLE一篇文章中資料:
1.故障現象
資料庫版本11G,錯誤類似以下:
ORA-00600: 內部錯誤碼, 參數: [kcratr_nab_less_than_odr]錯誤,具體的錯誤資訊類似:
Incident 63078 created, dump file: /u01/diag/rdbms/orcl/orcl/incident/incdir_63078/orcl_ora_1916_i63078.trc
ORA-00600: 內部錯誤碼, 參數: [kcratr_nab_less_than_odr], [1], [3313], [2328320], [2334233], [], [], [], [], [], [], []
ORA-00600: 內部錯誤碼, 參數: [kcratr_nab_less_than_odr], [1], [3313], [2328320], [2334233], [], [], [], [], [], [], []
ORA-00600: 內部錯誤碼, 參數: [kcratr_nab_less_than_odr], [1], [3313], [2328320], [2334233], [], [], [], [], [], [], []
ALERT日誌中有以下:
Thread 1 checkpoint: logseq 3313, block 2, scn 5965899084787
cache-low rba: logseq 3313, block 1484161
on-disk rba: logseq 3313, block 2334233, scn 5965899135009
start recovery at logseq 3313, block 1484161, scn 0
600錯誤中的1,3313的含義,是Thread 1 logseq 3313,那麼剩下的就應該是恢複時的rba地址,錯誤提示中的2334233是On-Disk Rba,是恢複應該到達的終點,而2328320小於On-Disk Rba,就應該是Less Than裡面提到的恢複的終點,因為沒有到達Redo的最後位置,被認為是非法的,可能遺失資料。
TRACE檔案中會有相應的提示:
WARNING! Crash recovery of thread 1 seq 3313 is
ending at redo block 2328320 but should not have ended before
redo block 2334233
我遇到的問題當時只有圖片如下
原因可能是因為執行個體恢複的進度不夠(因為Redo丟失或者硬體故障導致的REDO不完整--壞塊)。
這一點可以從當時報錯的TRACE檔案的圖片中得到驗證。
可以看到,需要最少恢複到的ON DISK RBA是block24955,而當前能恢複到的是24957,有部分塊丟失,因此報錯。
2.故障解決:
首先嘗試通過RECOVER DATABASE; RECOVERDATABASEUNTIL CANCEL;等方式進行恢複,但是未解決此問題。
最終通過重建控制檔案、再進行不完全恢複來OPEN資料庫。(前提是客戶只要求OPEN庫,是客戶的測試庫,丟些資料沒關係,如果是生產庫不允許丟資料,此方法就不適用了)
使用命令類似以下:
MOUNT狀態下: ALTERDATABASEBACKUP CONTROLFILE TOTRACE AS'/home/oracle/a.txt';
使用備份的控制檔案中內容,在SQLPLUS視窗執行類似以下:
CREATECONTROLFILE REUSE DATABASE…………
Alter database recover database until cancel using backup controlfile;
Alter database open resetlogs;
並建立暫存資料表空間。
參考連結:http://www.xifenfei.com/2347.html http://www.eygle.com/archives/2010/05/kcratr_nab_less_than_odr.html