Oracle Flashback Data Archive 详解

Oracle Flashback Data Archive 详解

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Flashback Data Archive(FDA)长期跟踪数据变更[1]:

详细见:Oracle Flashback Log 与 Flash Recovery Area


2. 特性

2.1 跟踪

- 行变更
- 历史
- 长期保留

2.2 透明

- 自动
- 应用无感知
- 查询

2.3 安全

- 防篡改
- 审计
- 合规

3. 配置

3.1 表空间

CREATE TABLESPACE fda_ts 
  DATAFILE '/u01/oradata/fda01.dbf' SIZE 10G;

3.2 FDA

CREATE FLASHBACK ARCHIVE DEFAULT fda_1y 
  TABLESPACE fda_ts 
  RETENTION 1 YEAR;

CREATE FLASHBACK ARCHIVE fda_5y 
  TABLESPACE fda_ts 
  RETENTION 5 YEAR;

3.3 授权

GRANT FLASHBACK ARCHIVE ADMINISTER TO scott;
GRANT FLASHBACK ARCHIVE ON fda_1y TO scott;

4. 使用

4.1 启用

ALTER TABLE emp FLASHBACK ARCHIVE fda_1y;

4.2 停止

ALTER TABLE emp NO FLASHBACK ARCHIVE;

4.3 查询

-- 历史查询
SELECT * FROM emp 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);

-- 时间段
SELECT * FROM emp 
VERSIONS BETWEEN TIMESTAMP 
  (SYSTIMESTAMP - INTERVAL '1' DAY) AND SYSTIMESTAMP;

5. 保留

5.1 保留期

- 1/5/10 年
- 自动清理
- 过期

5.2 调整

ALTER FLASHBACK ARCHIVE fda_1y MODIFY RETENTION 2 YEAR;

5.3 空间

ALTER FLASHBACK ARCHIVE fda_1y 
  MODIFY TABLESPACE fda_ts QUOTA 5G;

6. 管理

6.1 清理

-- 手动清理
ALTER FLASHBACK ARCHIVE fda_1y PURGE ALL;
ALTER FLASHBACK ARCHIVE fda_1y PURGE BEFORE TIMESTAMP ...;

6.2 表空间

ALTER FLASHBACK ARCHIVE fda_1y 
  ADD TABLESPACE fda_ts2;

7. 查看

7.1 视图

SELECT * FROM dba_flashback_archive;
SELECT * FROM dba_flashback_archive_tables;
SELECT * FROM dba_flashback_archive_ts;

7.2 历史

SELECT * FROM sys_fba_hist_12345;
SELECT * FROM sys_fba_track_12345;

8. 原理

8.1 触发器

- 自动触发器
- 捕获变更
- 存储

8.2 历史表

- SYS_FBA_HIST_...
- 历史数据
- 查询

8.3 事务

- 事务上下文
- 元数据
- 完整

9. 应用场景

9.1 审计

- 数据变更
- 历史
- 合规

9.2 报表

- 历史报表
- 时间点
- 查询

9.3 恢复

- 误操作
- 历史数据
- 恢复

10. 性能

10.1 优势

- 透明
- 长期
- 查询

10.2 开销

- DML 开销
- 存储
- 监控

10.3 优化

- 选择表
- 保留期
- 监控

11. 监控

11.1 使用

SELECT table_name, flashback_archive_name, archive_table_name
FROM dba_flashback_archive_tables;

11.2 空间

SELECT flashback_archive_name, tablespace_name, quota_in_mb
FROM dba_flashback_archive_ts;

12. 常见问题

12.1 ORA-55602

- 表已启用
- 检查

12.2 空间

- 表空间满
- 增加
- 清理

12.3 性能

- DML 慢
- 评估
- 监控

13. 最佳实践

  1. 关键表:启用
  2. 保留期:合理
  3. 表空间:专用
  4. 监控:空间
  5. 清理:过期
  6. 审计:查询
  7. 测试:性能
  8. 文档:配置
  9. 演练:定期
  10. 合规:审计

14. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Flashback Data Archive” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/