天天看點

ORA-00600 kcratr_nab_less_than_odr 處理小計

今天由于客戶現場異常斷電,oracle資料庫又無法啟動了。遠端上去看看吧。

資料庫隻能mount,已經無法啟動

嘗試recover和resetlogs open都不行

Alert log 顯示錯誤

結合ALERT裡的錯誤ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [29904], [4864], [4870],是由于伺服器異常斷電,導緻LGWR寫redo log時失敗,

下次重新啟動資料庫時,需要做執行個體級恢複,而又無法從聯機日志檔案裡擷取到這些redo資訊,因為上次斷電時,寫日志失敗了。

那麼ORA-00600的錯誤裡,那幾個參數 [1], [29904], [4864], [4870]的含義是,執行個體需要恢複sequence為29904的redo檔案,需要恢複到編号為4870的日志塊,而實際上隻能恢複到第4864個日志塊兒,是以資料庫就不能正常啟動。

那我們怎麼辦呢?先檢查一下控制檔案和datafile記錄的checkpoint_change#資訊吧。

資料檔案檢查點(記錄在控制檔案中)

系統檢查點(記錄在控制檔案中)

資料檔案頭檢查點(記錄在資料檔案中)

-7. 以上三個checkpoint_change#要一緻(隻讀、脫機表空間除外),資料庫才能正常打開。否則會需要進行一步的處理。正常關庫時,會生成新的檢查點,寫入上述三個checkpoint_change#,同時資料檔案中的last_change#也會記錄下該檢查點,也就是說三個checkpoint_change#與last_change#記錄着同一個值。

-8. 通過上面的錯誤,以及checkpoint_change#的不一緻,已經可以确認,就是控制檔案,由于斷電。導緻的controlfile損壞(checkpoint_change#不一緻)。

-9. 由于沒有備份,我們隻能通過重建controlfile的方式,來解決這個問題。

指定trace檔案的生成路徑

<code>SQL&amp;gt; alter database backup controlfile to trace as '/tmp/controlfile.trc';</code>

生成檔案提取建庫腳本如下,啟動資料庫到nomount狀态,執行下面腳本。

注意:類似的恢複操作,先将現有的資料庫進行備份。即使這個資料庫已經無法啟動。我們也要防止恢複操作導緻的更嚴重的問題。

-10. 檢查資料庫狀态

-11. 嘗試重新開機一下,看到是需要恢複的(其實我是知道這樣起不來的,但是就像任性的看看報錯)。

-12. 恢複資料庫,其實啥也沒做,recover就是走個過場,但是必須得走這個流程。

啟動資料庫,成功

再看看checkpoint_change#值,統一了吧。

最後,再唠叨一下,備份真的很重要!很簡單!

沒有備份的資料庫,不單單是裸奔那麼簡單!

不出問題,丢人!出問題,傷身啊!!

本文轉自 hsbxxl 51CTO部落格,原文連結:http://blog.51cto.com/hsbxxl/2060888,如需轉載請自行聯系原作者