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

Oracle SCN 機制深度解析:從事務提交到災難恢復的核心時鐘

     編輯:Oracle 資料庫基礎

SCN 核心定位:資料庫的「邏輯時鐘」

System Change Number (SCN) 是單調遞增的 64 位整數,貫穿資料庫全生命週期:事務提交、檢查點、日誌切換、備份恢復、Data Guard 同步、Streams 複製、RAC 全域一致性。理解 SCN 運作機制,即掌握 Oracle 一致性與恢復的底層邏輯。

事務寫入流程與 SCN 賦予

  1. 事務開始
  2. Buffer Cache 讀取/載入資料塊
  3. 修改 Buffer Cache → 標記「髒塊」 → 寫入 Redo Log Buffer
  4. 事務提交:LGWR 將 Redo Log Buffer 刷入 Redo Log File,**同時分配當前最大 SCN 記錄於該 Redo 記錄中**(可透過 dbms_flashback.get_system_change_number 獲取)。
  5. 檢查點:CKPT 更新控制檔/資料檔檔頭 SCN,DBWn 將髒塊寫入資料檔。

四大 SCN 分類與儲存位置

SCN 類型範圍儲存位置查詢視圖/欄位
System Checkpoint SCN全域控制檔V$DATABASE.CHECKPOINT_CHANGE#
Datafile Checkpoint SCN每資料檔控制檔V$DATAFILE.CHECKPOINT_CHANGE#
Start SCN (檢查點 SCN)每資料檔資料檔檔頭V$DATAFILE_HEADER.CHECKPOINT_CHANGE#
Stop SCN每資料檔控制檔V$DATAFILE.LAST_CHANGE#(正常運行為 NULL/無窮大)

SCN 推進關鍵節點

  • Redo Log 切換/檢查點:Low SCN → Next SCN 區間的 Redo 記錄被寫入資料檔,所有資料檔 Start SCN、控制檔 System/Datafile Checkpoint SCN 統一推進至 Next SCN。
  • Read-only 表空間例外:其資料檔 Start SCN 與 Datafile Checkpoint SCN 不更新,保持靜態一致性。
  • SCN 生成源頭:當前 Wall-clock Time 轉換而來,約每 3 秒自動推進一次(心跳機制),保證即使無業務提交也有 SCN 增長。

SCN 在實例恢復與介質恢復中的裁決邏輯

啟動階段檢查順序:
1. 控制檔 Datafile Checkpoint SCN == 資料檔 Start SCN ?
2. 控制檔 Datafile Checkpoint SCN == 控制檔 Stop SCN ?(Stop SCN 非 NULL 表示正常關閉)

不一致 → 從 Redo Log 找缺失 SCN 區間 → 重做 (REDO) → 恢復一致性
關閉模式System=Datafile=Start SCNStop SCN恢復動作
正常相等非 NULL無需恢復
異常相等NULL實例恢復
舊資料檔System=Datafile > StartNULL/非NULL介質恢復 + 實例恢復
備份控制檔System=Datafile ≤ StartNULL/非NULLUSING BACKUP CONTROLFILE 介質恢復 + RESETLOGS

SCN 時間轉換驗證(10g+)

SELECT dbms_flashback.get_system_change_number,
       scn_to_timestamp(dbms_flashback.get_system_change_number)
FROM   dual;
-- 2877076756 | 17-AUG-07 02.15.26.000000000 PM

SELECT timestamp_to_scn(systimestamp) FROM dual;
-- 2877078439

衍生高階功能

  • 資料庫閃回 / 閃回資料表 / 閃回查詢
  • 資料庫負載重現
  • Data Guard 同步進度監控

結語

SCN 是 Oracle 一致性模型的基石。掌握其生成、推進、四類 SCN 交互檢查邏輯,能讓 DBA 在災難恢復、備份策略設計、複雜複製拓撲排錯中游刃有餘。

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