Oracle 10g 引入兩大函數支援 SCN(System Change Number)與時間戳雙向轉換,強化閃回功能:
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER:獲取當前 SCN。SCN_TO_TIMESTAMP(scn):SCN → 時間戳。TIMESTAMP_TO_SCN(timestamp):時間戳 → SCN。-- 1. 獲取當前 SCN
COL scn FOR 9999999999999
SELECT dbms_flashback.get_system_change_number scn FROM dual;
-- 結果:8908390522972
-- 2. SCN 轉時間戳
SELECT scn_to_timestamp(8908390522972) FROM dual;
-- 結果:05-JAN-07 10.56.30.000000000 AM
-- 3. 時間戳轉回 SCN(驗證可逆性)
SELECT timestamp_to_scn(scn_to_timestamp(8908390522972)) FROM dual;
-- 結果:8908390522972
轉換依賴數據庫內部映射記錄,**持久 SCN(如歸檔日志記錄的 SCN)可能無法轉換**:
SELECT MIN(first_change#), MAX(first_change#) FROM v$archived_log;
-- 假設範圍:8907349093953 ~ 8908393582271
SELECT scn_to_timestamp(8907349093953) FROM dual;
-- 報錯:ORA-08181: specified number is not a valid system change number
原因:該 SCN 已超出內部映射表保留範圍。10g 以前版本無此類函數,只能通過 LogMiner 分析日志獲取對應關係。