Oracle 在 OPEN 階段會執行嚴格的一致性檢驗,確保資料檔與控制檔 SCN 一致,才允許資料庫正常開啟。本文透過實際 TRACE 轉儲內容,詳細還原檢驗邏輯。
Checkpoint CNT vs 控制檔 Checkpoint CNT。Stop SCN(最後完成檢查點 SCN)vs 控制檔 Database Checkpoint SCN。控制檔記錄:
Database checkpoint: Thread=1 scn: 0x0000.0076948a
DATA FILE #1:
Checkpoint cnt:1110 scn: 0x0000.0076948a 05/05/2015 12:41:20
Stop scn: 0x0000.0076948a
資料檔頭記錄:
V10 STYLE FILE HEADER:
Checkpointed at scn: 0x0000.0076948a 05/05/2015 12:41:20
status:0x2000 root dba:0x00400208 chkpt cnt: 1110 ctl cnt:1109
chkpt cnt=1110,控制檔 ctl cnt=1109。因檢查點更新時,先寫資料檔頭(含當前 ctl cnt),再更新控制檔,故差 1 為正常現象。0x0000.0076948a,表示資料檔無需恢復,可直接 OPEN。若資料庫異常關閉,資料檔頭 SCN 落後於控制檔,Oracle 將以資料檔頭 SCN 為起點,套用 Redo Log 進行執行個體恢復,將資料檔推進至一致狀態。
SELECT file#, checkpoint_change# FROM v$datafile; -- 控制檔視角
SELECT file#, checkpoint_change# FROM v$datafile_header; -- 資料檔頭視角
-- 兩者一致則無需恢復
掌握此機制,有助於快速判斷啟動失敗原因,並制定備份恢復策略。