首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle SCN 機制深度解析:五大關鍵 SCN 與啟動恢復邏輯全圖解

     編輯:Oracle 資料庫基礎

System Change Number (SCN) 是 Oracle 資料庫內部的邏輯時鐘,貫穿重做日誌、檢查點、恢復、一致性讀取等核心機制。理解各類 SCN 的定義、儲存位置與交互關係,是掌握備份恢復原理、Data Guard 同步邏輯、閃回技術的基石。本文系統梳理五大關鍵 SCN 及其在正常運行、關閉、啟動三階段的流轉邏輯。

五大核心 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

三階段 SCN 流轉邏輯

1. 正常運行階段

  • 系統檢查點 SCN = 所有資料檔檢查點 SCN = 所有資料檔頭啟動 SCN (同步一致)
  • 所有資料檔終止 SCN = NULL (表示檔案開啟且可讀寫)
  • CKPT 進程定期觸發檢查點,將髒區塊刷盤,推進上述 SCN

2. 正常關閉階段 (SHUTDOWN NORMAL/IMMEDIATE/TRANSACTIONAL)

  1. 執行檢查點,將所有髒區塊強制刷入資料檔
  2. 將各資料檔的終止 SCN 設為當前啟動 SCN 值 (記錄於控制檔)
  3. 此時:終止 SCN = 檔頭啟動 SCN = 控制檔檢查點 SCN

3. 啟動開啟階段 (STARTUP → OPEN)

Oracle 依序執行三層一致性檢查:

  1. 檔頭 vs 控制檔檢查點:比較 V$DATAFILE_HEADER.CHECKPOINT_CHANGE# 與 V$DATAFILE.CHECKPOINT_CHANGE#。若不一致 → 需執行執行個體恢復 (應用 Redo)。
  2. 檔頭啟動 SCN vs 控制檔終止 SCN:若步驟 1 通過,進一步比較檔頭啟動 SCN 與 V$DATAFILE.LAST_CHANGE#。若一致 → 確認關閉時所有變更已落盤,無需恢復,直接開啟。
  3. 開啟完成:所有檔案通過檢查,將控制檔中的終止 SCN 重置為 NULL,標記檔案可正常讀寫。

異常場景判斷速查表

場景檔頭啟動 SCN控制檔檢查點 SCN控制檔終止 SCN結果
正常關閉後啟動100100100無需恢復,直接 OPEN
異常終止 (SHUTDOWN ABORT/崩潰)100120NULL需執行個體恢復 (應用 100→120 Redo)
資料檔遺失/損壞100120NULL需媒體恢復 (Restore + Recover)
備份控制檔啟動10090 (舊)NULL需 RECOVER DATABASE USING BACKUP CONTROLFILE

實務應用場景

  • RMAN 增量備份:依據 CHECKPOINT_CHANGE# 判斷區塊自上次備份後是否變更。
  • Data Guard 同步:Standby 應用 Redo 至目標 SCN,V$DATAGUARD_STATS 顯示應用延遲 SCN 差值。
  • 閃回資料庫:FLASHBACK DATABASE TO SCN xxx 依賴閃回日誌中記錄的歷史 SCN 映射。
  • 分散式交易:全域 SCN 協調多節點提交一致性 (2PC)。

總結

SCN 是 Oracle 時序一致性的唯一權威。五大 SCN 分別記錄於控制檔與資料檔頭,三階段檢查邏輯確保了「寫入有序、恢復精準、開啟安全」。DBA 應熟練查詢上述視圖,在故障診斷、備份驗證、遷移演練中快速定位一致性狀態。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved