Oracle Flashback Query 允許開發者查詢過去某個時間點(以 SCN 或 Timestamp 為準)的資料狀態,無需從備份還原即可檢視歷史版本,極適合稽核、誤刪復原與資料異動分析。
SELECT dbms_flashback.get_system_change_number FROM dual;COMMIT。SELECT id, vl, versions_startscn, versions_endscn, versions_operation, versions_xid
FROM flash_tbl VERSIONS BETWEEN SCN 1196559 AND 1196625;| 欄位 | 意義 |
|---|---|
| VERSIONS_OPERATION | I=Insert, U=Update, D=Delete |
| VERSIONS_XID | 交易 ID,可關聯至 FLASHBACK_TRANSACTION_QUERY |
| VERSIONS_STARTSCN / ENDSCN | 該版本生效的 SCN 範圍 |
授予 SELECT ANY TRANSACTION 權限後,可查詢 FLASHBACK_TRANSACTION_QUERY 取得交易的 Commit SCN、時間、操作類型與反向 SQL(UNDO_SQL),直接產生回滾腳本:
SELECT xid, commit_scn, commit_timestamp, operation, undo_sql
FROM flashback_transaction_query
WHERE xid IN (SELECT versions_xid FROM flash_tbl VERSIONS BETWEEN SCN 1200548 AND 1200555);
UNDO_RETENTION 參數足夠大,保留足夠的歷史資料供查詢。DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER 可在 Session 層級固定查詢時間點。