System Change Number (SCN) 是單調遞增的 64 位整數,貫穿資料庫全生命週期:事務提交、檢查點、日誌切換、備份恢復、Data Guard 同步、Streams 複製、RAC 全域一致性。理解 SCN 運作機制,即掌握 Oracle 一致性與恢復的底層邏輯。
dbms_flashback.get_system_change_number 獲取)。| 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/無窮大) |
啟動階段檢查順序:
1. 控制檔 Datafile Checkpoint SCN == 資料檔 Start SCN ?
2. 控制檔 Datafile Checkpoint SCN == 控制檔 Stop SCN ?(Stop SCN 非 NULL 表示正常關閉)
不一致 → 從 Redo Log 找缺失 SCN 區間 → 重做 (REDO) → 恢復一致性
| 關閉模式 | System=Datafile=Start SCN | Stop SCN | 恢復動作 |
|---|---|---|---|
| 正常 | 相等 | 非 NULL | 無需恢復 |
| 異常 | 相等 | NULL | 實例恢復 |
| 舊資料檔 | System=Datafile > Start | NULL/非NULL | 介質恢復 + 實例恢復 |
| 備份控制檔 | System=Datafile ≤ Start | NULL/非NULL | USING BACKUP CONTROLFILE 介質恢復 + RESETLOGS |
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
SCN 是 Oracle 一致性模型的基石。掌握其生成、推進、四類 SCN 交互檢查邏輯,能讓 DBA 在災難恢復、備份策略設計、複雜複製拓撲排錯中游刃有餘。