Oracle Flashback Data Archive 详解
Oracle Flashback Data Archive 详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Flashback Data Archive(FDA)长期保留行历史[1]:
2. 特性
2.1 长期保留
- 不依赖 Undo
- 独立表空间存储
- 保留时间可配置
- 年级
2.2 自动化
- 自动捕获 DML
- 自动管理历史
- 自动清理
2.3 透明
- 应用无感知
- AS OF 查询
- Versions Query
3. 创建
3.1 表空间
CREATE TABLESPACE fda_ts
DATAFILE '/u01/oradata/fda01.dbf' SIZE 10G;
3.2 Flashback Archive
CREATE FLASHBACK ARCHIVE DEFAULT fda_1y
TABLESPACE fda_ts
QUOTA 10G
RETENTION 1 YEAR;
CREATE FLASHBACK ARCHIVE fda_5y
TABLESPACE fda_ts
QUOTA 50G
RETENTION 5 YEAR;
3.3 权限
GRANT FLASHBACK ARCHIVE ON fda_1y TO scott;
GRANT FLASHBACK ARCHIVE ADMINISTER TO scott;
4. 启用
4.1 表级
ALTER TABLE employees FLASHBACK ARCHIVE fda_1y;
4.2 默认
ALTER TABLE employees FLASHBACK ARCHIVE;
-- 使用默认 FDA
4.3 禁用
ALTER TABLE employees NO FLASHBACK ARCHIVE;
5. 查询
5.1 AS OF
SELECT * FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' YEAR)
WHERE id = 100;
5.2 VERSIONS
SELECT versions_xid, versions_starttime, versions_operation, salary
FROM employees
VERSIONS BETWEEN TIMESTAMP
(SYSTIMESTAMP - INTERVAL '1' YEAR) AND SYSTIMESTAMP
WHERE id = 100;
6. 管理
6.1 查看
SELECT * FROM dba_flashback_archive;
SELECT * FROM dba_flashback_archive_ts;
SELECT * FROM dba_flashback_archive_tables;
6.2 修改
ALTER FLASHBACK ARCHIVE fda_1y
SET DEFAULT;
ALTER FLASHBACK ARCHIVE fda_1y
RETENTION 2 YEAR;
ALTER FLASHBACK ARCHIVE fda_1y
ADD TABLESPACE fda_ts2 QUOTA 20G;
ALTER FLASHBACK ARCHIVE fda_1y
PURGE ALL;
ALTER FLASHBACK ARCHIVE fda_1y
PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '6' MONTH);
6.3 删除
DROP FLASHBACK ARCHIVE fda_1y;
7. 内部机制
7.1 FBDA 进程
- Flashback Data Archive 进程
- 异步捕获 DML
- 写入历史表
7.2 历史表
- 系统命名(SYS_FBA_...)
- 包含所有列 + 时间范围
- 自动维护
7.3 查询重写
- AS OF 自动重写到历史表
- 透明
8. 优化
8.1 表空间
- 独立表空间
- 大小充足
- 监控
8.2 索引
- 历史表索引
- 自动
8.3 压缩
- 11g+
- 历史数据压缩
- 节省空间
9. 限制
9.1 DDL
- 部分 DDL 受限
- DROP COLUMN
- RENAME
- 测试
9.2 数据类型
- 大部分支持
- LOB 部分限制
9.3 性能
- DML 开销
- FBDA 异步
- 一般可接受
10. 应用场景
10.1 合规审计
- 金融行业
- 长期保留
- 审计追溯
10.2 历史数据
- 数据演变
- 趋势分析
- 长期查询
10.3 数据恢复
- 误操作恢复
- 不依赖 Undo
- 长时间窗口
10.4 报表
- 历史报表
- 时间点查询
- 透明
11. 监控
11.1 空间
SELECT flashback_archive_name, tablespace_name, quota_in_mb
FROM dba_flashback_archive_ts;
11.2 表
SELECT table_name, flashback_archive_name, archive_table_name, status
FROM dba_flashback_archive_tables;
11.3 FBDA 进程
SELECT * FROM v$session_longops WHERE opname LIKE '%Flashback%';
12. 常见坑与排错
12.1 ORA-55602
- 表空间不足
- 增加配额
12.2 ORA-55608
- 不支持的 DDL
- 检查
12.3 性能
- DML 慢
- FBDA 异步
- 监控
13. 最佳实践
- 独立表空间:FDA
- 保留时间:业务
- 默认 FDA:简化
- 权限:受控
- 监控:空间
- 压缩:节省
- 审计:合规
- 测试:DDL
- 文档:保留策略
- 演练:恢复
14. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Flashback Data Archive” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/