SCN (System Change Number) 是 Oracle 資料庫內部的一個單調遞增的邏輯時鐘,標記資料庫的一致性時間點。每個已提交的交易都會被賦予一個唯一的 SCN,由 LGWR 在 Commit 時同步寫入 Redo Log,確保 Commit 返回前,Redo 已持久化且 SCN 已記錄。
SCN_TO_TIMESTAMP / TIMESTAMP_TO_SCN),精度約 3 秒 (依 SMON_SCN_TIME 映射表)。-- 現代標準寫法 (10g+)
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM dual;
-- 相容舊版
SELECT CURRENT_SCN FROM V$DATABASE;
-- 等價查詢
SELECT CHECKPOINT_CHANGE# FROM V$DATABASE; -- 最近 Checkpoint SCN
Checkpoint 目的:將緩衝區中的髒塊 (已提交交易修改的塊) 寫回資料檔,縮短執行個體復原時間 (MTTR)。
SHUTDOWN NORMAL/IMMEDIATE) 會觸發 Checkpoint,確保所有 SCN 持久化到資料檔頭。| 位置 | 視圖/來源 | 含義 |
|---|---|---|
| Control File: System Checkpoint SCN | V$DATABASE.CHECKPOINT_CHANGE# | 資料庫層級最近完成 Checkpoint 的 SCN |
| Control File: Datafile Checkpoint SCN | V$DATAFILE.CHECKPOINT_CHANGE# | 各資料檔層級最近完成 Checkpoint 的 SCN |
| Control File: Stop SCN | V$DATABASE.LAST_OPEN_INCARNATION# 相關 | 資料庫最後正常關閉時的 SCN (用於判斷是否需執行執行個體復原) |
| Datafile Header | 檔案頭部區塊 | 該檔案自身的 Checkpoint SCN,啟動時與 Control File 比對決定是否需復原 |
啟動時比對 Control File Stop SCN 與 Datafile Header Checkpoint SCN:若一致 → 乾淨關閉,無需復原;若不一致 → 從 Datafile Header Checkpoint SCN 開始應用 Redo (線上/歸檔) 向前滾動,再回滾未提交交易。
FLASHBACK TABLE TO SCN / FLASHBACK DATABASE TO SCN:依 SCN 定位歷史版本。FLASHBACK TRANSACTION QUERY:查詢指定 SCN 範圍的交易變更。UNDO_RETENTION、FLASHBACK RETENTION TARGET 保留足夠 Undo/Flashback Log。Primary 產生 Redo (含 SCN) → 傳輸至 Standby → Standby Apply 過程按 SCN 順序應用,V$DATAGUARD_STATS.APPLY_LAG 即以 SCN 差異換算時間延遲。
捕獲程序讀取 Redo,按 SCN 組裝 LCR (Logical Change Record);應用程序按 SCN 順序重放,保證邏輯一致性。
CHECKPOINT_CHANGE# (資料檔) 與 REDO_THREAD/REDO_START_SCN (歸檔)。RECOVER DATABASE UNTIL SCN 123456:精確至 SCN 的時間點恢復 (PITR)。INCREMENTAL LEVEL 1 依 SCN 判斷哪些塊在基準 SCN 後變更。DBMS_SCN 監控套件。GLOBAL_NAMES=FALSE 避免不必要同步或升級至 12c+ 受保護。-- 當前 SCN 增長速率 (每秒)
SELECT (MAX(SCN) - MIN(SCN)) / (MAX(TS) - MIN(TS)) AS scn_per_sec
FROM (
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER SCN, SYSTIMESTAMP TS FROM dual
UNION ALL SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER, SYSTIMESTAMP FROM dual
-- 實際應用中定期寫入監控表
);
-- 檢查 SCN Headroom (12c+)
SELECT * FROM V$SCN_HEADROOM;
-- 查詢 SCN 對應時間 (近似)
SELECT SCN_TO_TIMESTAMP(123456789) FROM dual;
SCN 是 Oracle 一致性、恢復、複製、閃回的核心錨點。理解 SCN 的產生 (Commit)、持久化 (Redo/Checkpoint)、記錄位置 (Control/Datafile Header)、應用場景 (Recovery/Flashback/DG/GG/RMAN),是高階 DBA 掌握資料庫核心運作、排查疑難雜症、設計高可用架構的必備內功。