System Change Number (SCN) 是 Oracle 資料庫內部的邏輯時鐘,貫穿重做日誌、檢查點、恢復、一致性讀取等核心機制。理解各類 SCN 的定義、儲存位置與交互關係,是掌握備份恢復原理、Data Guard 同步邏輯、閃回技術的基石。本文系統梳理五大關鍵 SCN 及其在正常運行、關閉、啟動三階段的流轉邏輯。
| SCN 類型 | 含義 | 儲存位置 | 查詢視圖 |
|---|---|---|---|
| 系統檢查點 SCN (Checkpoint SCN) |
最近一次完成檢查點時的全域 SCN | 控制檔 | V$DATABASE.CHECKPOINT_CHANGE# |
| 資料檔檢查點 SCN | 各資料檔最近一次檢查點完成時的 SCN | 控制檔 | V$DATAFILE.CHECKPOINT_CHANGE# |
| 啟動 SCN (Start SCN) |
資料檔頭部記錄的檢查點 SCN,用於開啟時判斷是否需恢復 | 資料檔檔頭 + 控制檔 | V$DATAFILE_HEADER.CHECKPOINT_CHANGE# |
| 終止 SCN (Stop SCN / Last Change#) |
資料檔最後一次正常關閉時的 SCN;正常開啟時為 NULL | 控制檔 | V$DATAFILE.LAST_CHANGE# |
| 當前 SCN | 資料庫持續遞增的邏輯時鐘值 | 記憶體 (SGA) + 控制檔定期刷新 | DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER |
Oracle 依序執行三層一致性檢查:
V$DATAFILE_HEADER.CHECKPOINT_CHANGE# 與 V$DATAFILE.CHECKPOINT_CHANGE#。若不一致 → 需執行執行個體恢復 (應用 Redo)。V$DATAFILE.LAST_CHANGE#。若一致 → 確認關閉時所有變更已落盤,無需恢復,直接開啟。| 場景 | 檔頭啟動 SCN | 控制檔檢查點 SCN | 控制檔終止 SCN | 結果 |
|---|---|---|---|---|
| 正常關閉後啟動 | 100 | 100 | 100 | 無需恢復,直接 OPEN |
| 異常終止 (SHUTDOWN ABORT/崩潰) | 100 | 120 | NULL | 需執行個體恢復 (應用 100→120 Redo) |
| 資料檔遺失/損壞 | 100 | 120 | NULL | 需媒體恢復 (Restore + Recover) |
| 備份控制檔啟動 | 100 | 90 (舊) | NULL | 需 RECOVER DATABASE USING BACKUP CONTROLFILE |
CHECKPOINT_CHANGE# 判斷區塊自上次備份後是否變更。V$DATAGUARD_STATS 顯示應用延遲 SCN 差值。FLASHBACK DATABASE TO SCN xxx 依賴閃回日誌中記錄的歷史 SCN 映射。SCN 是 Oracle 時序一致性的唯一權威。五大 SCN 分別記錄於控制檔與資料檔頭,三階段檢查邏輯確保了「寫入有序、恢復精準、開啟安全」。DBA 應熟練查詢上述視圖,在故障診斷、備份驗證、遷移演練中快速定位一致性狀態。