傳統 UNDO 保留受限於表空間大小與 UNDO_RETENTION,無法滿足長期審計與歷史追溯需求。Oracle 11g 引入 Flashback Data Archive (FDA),配合後台進程 FBDA 將 UNDO 永久歸檔,實現 Oracle Total Recall 全面回溯能力。本文從架構原理到部署驗證全流程解析。
CREATE TABLESPACE fbda
DATAFILE '/u01/oradata/tqgzs11g/FBDA.dbf' SIZE 200M
SEGMENT SPACE MANAGEMENT AUTO;
FLASHBACK ARCHIVE ADMINISTER 系統權限(SYS 或授權角色)CREATE FLASHBACK ARCHIVE fda
TABLESPACE fbda
RETENTION 1 MONTH; -- 保留期:1 MONTH / 1 YEAR / 5 YEAR 等
-- 需 FLASHBACK ARCHIVE OBJECT 權限
GRANT FLASHBACK ARCHIVE ON fda TO tq;
-- 啟用
ALTER TABLE t FLASHBACK ARCHIVE fda;
-- 關閉
ALTER TABLE t NO FLASHBACK ARCHIVE;
-- 1. 建立小 UNDO 表空間加速老化
CREATE UNDO TABLESPACE undotbs2_small
DATAFILE '/u01/oradata/tqgzs11g/UNDOTBS2_SMALL.dbf' SIZE 20M AUTOEXTEND OFF;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2_SMALL;
-- 2. 測試用戶操作
CONN tq/tq
INSERT INTO t VALUES (1, 'A'); COMMIT;
-- 等待 FBDA 背景寫入(或手動觸發)
EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('TQ','T'); -- 11gR2 可用
EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('TQ','T','FDA');
-- 3. 歷史查詢(AS OF TIMESTAMP)
SELECT * FROM t AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
-- 4. 版本查詢(VERSIONS BETWEEN)
SELECT versions_starttime, versions_endtime, id, val
FROM t VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE;
| 任務 | 指令/視圖 |
|---|---|
| 檢視 Archive 狀態 | SELECT * FROM DBA_FLASHBACK_ARCHIVE; |
| 檢視表關聯 | SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES; |
| 監控 FBDA 進程 | SELECT * FROM V$FLASHBACK_ARCHIVE_STAT; |
| 調整保留期 | ALTER FLASHBACK ARCHIVE fda MODIFY RETENTION 2 YEAR; |
| 清理過期資料 | 自動由 FBDA 依 RETENTION 執行,亦可手動 DBMS_FLASHBACK_ARCHIVE.PURGE |