System Change Number (SCN) 是 Oracle 內部時鐘標記每次提交的唯一遞增數值。10g 引入 SCN_TO_TIMESTAMP、TIMESTAMP_TO_SCN 兩大內建函數,打通 SCN 與壁鐘時間雙向轉換,大幅簡化閃回查詢與恢復點定位。
| 函數 | 用途 | 範例 |
|---|---|---|
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER | 取得當前 SCN | SELECT dbms_flashback.get_system_change_number FROM dual; |
SCN_TO_TIMESTAMP(scn) | SCN → TIMESTAMP | SELECT scn_to_timestamp(8908390522972) FROM dual; |
TIMESTAMP_TO_SCN(ts) | TIMESTAMP → SCN | SELECT timestamp_to_scn(SYSDATE) FROM dual; |
SELECT * FROM emp AS OF TIMESTAMP (SCN_TO_TIMESTAMP(34607271));
FLASHBACK DATABASE TO SCN 8908390522972;
FLASHBACK_TRANSACTION_QUERY 定位異動 SCN,再轉換為時間給業務溝通。映射關係依賴控制檔與線上/歸檔日誌,超出保留範圍的 SCN 無法轉換:
SELECT MIN(first_change#), MAX(first_change#) FROM v$archived_log;
-- 僅此範圍內的 SCN 可轉換
SELECT scn_to_timestamp(8907349093953) FROM dual;
-- ORA-08181: specified number is not a valid system change number
CONTROL_FILE_RECORD_KEEP_TIME 延長控制檔記錄保留(預設 7 天)。SELECT dbms_flashback.get_system_change_number FROM dual;TIMESTAMP_TO_SCN 精度提升至秒級;CURRENT_SCN 偽欄位可直接在查詢中使用。
掌握 SCN-Time 雙向轉換,讓閃回技術真正落地於業務恢復與審計場景。