大家好,我是 JiekeXu,江湖人称“强哥”,青学会MOP技术社区主席,荣获Oracle ACE Pro称号,OpenTenBase ACE,金仓社区最具价值倡导者KVA,崖山最具价值专家YVP,IvorySQL开源社区专家顾问委员会成员,KWDB社区MVP,墨天轮MVP,墨天轮连续多年度“墨力之星”,拥有Oracle OCP/OCM认证,MySQL 5.7/8.0 OCP认证以及金仓KCA、KCP、KCM、KCSM证书,TiDB PCTA/PCTP证书、PCA、OBCA、OGCA等众多国产数据库认证证书,专注于数据库技术、系统架构及大数据运维,致力于分享最纯粹、最接地气的 DBA 实战与前沿技术洞察。如果你也对数据技术充满热忱,欢迎关注我的微信公众号“JiekeXu DBA之路”点赞、转发与评论,谢谢!

前 言
上个月底由于某审计要求,需要查看数据库数据的变更历史,包括数据的修改、删除、新增等变化,保存时间为不低于 6 个月,以便追溯数据的变更过程。这样的要求要么专门的数据库审计设备来搞定,要么数据库自身开启审计,保留半年及以上的记录,要是都没有,那就数据库自身来保障了,刚好 Oracle 提供了一种叫 Flashback Data Archive (FDA) 的技术能够满足这样的要求,下面来一起看看学习一下吧。
Oracle 19c Flashback Data Archive (FDA) 闪回数据归档技术介绍
一、技术概述
1.1 什么是 FDA
Flashback Data Archive 是 Oracle 提供的长期数据变更历史保留机制。它自动捕获表的每一行 DML 变更(INSERT/UPDATE/DELETE),存储在专用的归档表空间中,使你可以查询数月甚至数年前的数据状态。
📖 官方文档:Flashback Data Archive — Oracle Database 19c Development Guide
1.2 FDA vs 普通 Flashback Query 的区别
| 维度 | 普通 Flashback Query | Flashback Data Archive |
|---|---|---|
| 依赖 | UNDO 表空间 | 专用归档表空间 |
| 保留时长 | UNDO 保留期内(通常几小时) | 自定义,可达数年 |
| UNDO 被覆盖后 | ❌ 无法查询 | ✅ 仍可查询 |
| 数据安全性 | UNDO 数据可能被覆盖 | ✅ 归档数据受保护,不被覆盖 |
| 性能影响 | 无额外开销 | DML 时有额外写入开销(~5%~10%) |
| 存储成本 | 共享 UNDO 表空间 | 需要专用表空间 |
| 合规审计 | 不满足长期留存要求 | ✅ 满足金融/医疗等合规要求 |

1.3 工作原理
FDA 内部架构
┌──────────────────────────────────────────┐
│ 应用层 │
│ INSERT / UPDATE / DELETE │
└──────────────┬───────────────────────────┘
│
▼
┌──────────────────────────────────────────┐
│ Oracle 数据库 │
│ │
│ ┌─────────┐ 自动捕获(后台进程) │
│ │ 目标表 │ ──────────────────► │
│ │(业务表) │ FBDA 后台进程 │
│ └─────────┘ 异步写入 │
│ │ │
│ │ ┌─────────────────────┐ │
│ │ │ FDA 归档表空间 │ │
│ │ │ │ │
│ │ │ SYS_FBA_HIST_n │ │ ← 历史版本数据
│ │ │ SYS_FBA_TCRV_n │ │ ← 事务上下文
│ │ │ SYS_FBA_DL_n │ │ ← 被删除行的记录
│ │ └─────────────────────┘ │
└──────────────────────────────────────────┘
核心进程:FBDA(Flashback Data Archive Process)
- 异步读取 UNDO 数据,将变更写入 FDA 归档表
- 不阻塞业务 DML 操作
- 默认每 5 秒采集一次(可调)
1.4 版本特性(19c)
- 12.2+:FDA 支持对启用 FDA 的表执行 DDL 操作(添加列、修改列类型等),之前版本不允许
- 19c:支持分区表的 FDA、优化了存储压缩
- 无需 Advanced Security Option:FDA 是标准企业版功能
二、完整实施方案
2.1 环境检查
-- 1. 确认数据库版本(需 11.2.0.4+,推荐 12.2+)
SELECT BANNER_FULL FROM v$version WHERE banner LIKE 'Oracle%';
-- 2. 确认是否为 Enterprise Edition(FDA 需要 EE)
SELECT * FROM v$version;
-- 3. 检查现有表空间情况
SELECT tablespace_name, bytes/1024/1024 AS size_mb
FROM dba_data_files
ORDER BY tablespace_name;
-- 4. 检查是否有已存在的 Flashback Archive
SELECT * FROM dba_flashback_archive;
-- 5. 检查是否有已启用 FDA 的表
SELECT * FROM dba_flashback_archive_tables;
2.2 创建 FDA 专用表空间
-- 创建 FDA 表空间(建议单独表空间,与业务数据分离)
CREATE TABLESPACE fda_data
DATAFILE '+DATA' SIZE 2G
AUTOEXTEND ON NEXT 500M MAXSIZE 30G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
-- 如需更高安全性,可以创建多个表空间
CREATE TABLESPACE fda_data2
DATAFILE '+DATA' SIZE 2G
AUTOEXTEND ON NEXT 500M MAXSIZE 30G;
容量估算参考:
- 一张日增 10 万行 DML 的表,1 年归档数据约 10GB~30GB(含事务元数据)
- 建议初始分配 2G,开启 AUTOEXTEND
- 可在创建 FDA 时设置 QUOTA 限制,防止无限增长
2.3 授权
-- 1. 授予 DBA 管理 FDA 的权限(系统级)
GRANT FLASHBACK ARCHIVE ADMINISTER TO DBA;
-- 2. 授予用户对具体 FDA 的使用权限
-- (下面创建 FDA 后再执行)
-- GRANT FLASHBACK ARCHIVE ON <archive_name> TO <user>;
2.4 创建 Flashback Archive
-- 创建默认 FDA,保留 1 年
CREATE FLASHBACK ARCHIVE DEFAULT fda_1year
TABLESPACE fda_data
QUOTA 20G -- 限制使用 20GB
RETENTION 1 YEAR; -- 数据保留 1 年
-- 创建长期 FDA,保留 5 年(金融合规常见要求)
CREATE FLASHBACK ARCHIVE fda_5year
TABLESPACE fda_data QUOTA 15G,
TABLESPACE fda_data2 QUOTA 15G -- 支持多表空间
RETENTION 5 YEAR;
-- 创建短期 FDA,保留 30 天
CREATE FLASHBACK ARCHIVE fda_30day
TABLESPACE fda_data
QUOTA 2G
RETENTION 30 DAY;
-- 查看 FDA 列表
SELECT
flashback_archive_name,
retention_in_days,
status,
create_time
FROM dba_flashback_archive;
-- 查看 FDA 表空间
SELECT
f.flashback_archive_name,
t.tablespace_name,
t.quota_in_mb,
f.retention_in_days,
f.status
FROM dba_flashback_archive f
JOIN dba_flashback_archive_ts t
ON f.flashback_archive_name = t.flashback_archive_name;
-- 查看 FDA 表空间使用情况
SELECT
df.tablespace_name,
fa.flashback_archive_name,
fb.retention_in_days,
ROUND(SUM(df.bytes) / 1024 / 1024, 2) AS total_mb,
ROUND(SUM(df.bytes) / 1024 / 1024 -
SUM(NVL(fs.bytes, 0)) / 1024 / 1024, 2) AS used_mb,
ROUND(SUM(NVL(fs.bytes, 0)) / 1024 / 1024, 2) AS free_mb,
ROUND((1 - SUM(NVL(fs.bytes, 0)) / SUM(df.bytes)) * 100, 2) AS used_pct
FROM dba_flashback_archive_ts fa
JOIN dba_flashback_archive fb
ON fa.flashback_archive_name = fb.flashback_archive_name
JOIN dba_data_files df
ON fa.tablespace_name = df.tablespace_name
LEFT JOIN dba_free_space fs
ON df.tablespace_name = fs.tablespace_name
GROUP BY df.tablespace_name, fa.flashback_archive_name, fb.retention_in_days
ORDER BY used_pct DESC;
📖 官方文档:
2.5 授予用户使用 FDA 的权限
-- 授予业务用户使用指定 FDA 的权限
GRANT FLASHBACK ARCHIVE ON fda_1year TO ccm;
GRANT FLASHBACK ARCHIVE ON fda_5year TO ccm;
-- 授予查询历史数据的权限
GRANT FLASHBACK ANY TABLE TO ccm;
2.6 为表启用 FDA
-- 方式一:新建表时直接启用
CREATE TABLE ccm.T_LC (
sequence_no VARCHAR2(50) PRIMARY KEY,
lc_no VARCHAR2(30),
state VARCHAR2(10),
sub_state VARCHAR2(10),
amount NUMBER(18,2),
create_time DATE DEFAULT SYSDATE
)
FLASHBACK ARCHIVE fda_1year; -- 启用 FDA,使用 1 年保留策略
-- 方式二:现有表启用 FDA(不停业务,在线操作)
ALTER TABLE ccm.T_LC FLASHBACK ARCHIVE fda_1year; --FLASHBACK_ARCHIVE_NAME
-- 方式三:启用默认 FDA
ALTER TABLE ccm.T_LC FLASHBACK ARCHIVE; -- 使用 DEFAULT FDA
-- 方式四:指定长期 FDA
ALTER TABLE ccm.T_LC FLASHBACK ARCHIVE fda_5year;
2.7 验证 FDA 已启用
-- 查看哪些表启用了 FDA
SELECT
owner_name,
table_name,
flashback_archive_name,
archive_table_name, -- 内部归档表名(SYS_FBA_HIST_n)
status
FROM dba_flashback_archive_tables;
📖 官方文档:DBA_FLASHBACK_ARCHIVE_TABLES — Oracle Database 19c Reference
三、FDA 日常使用
3.1 闪回查询历史数据
-- 查询 6 个月前的数据
SELECT * FROM ccm.T_LC
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '6' MONTH)
WHERE sequence_no = '202601001';
-- 查询指定日期的数据
SELECT * FROM ccm.T_LC
AS OF TIMESTAMP TO_TIMESTAMP('2026-08-15 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 查询某个 SCN 的数据
SELECT * FROM ccm.T_LC
AS OF SCN 5000000;
-- VERSIONS BETWEEN:查看某行数据的变更历史
SELECT
sequence_no, lc_no, state, sub_state, amount,
versions_starttime AS change_time,
versions_endtime,
versions_operation AS op -- I/U/D
FROM ccm.T_LC
VERSIONS BETWEEN TIMESTAMP
(TO_TIMESTAMP('2026-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
AND (TO_TIMESTAMP('2026-08-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
WHERE sequence_no = '202601001'
ORDER BY versions_starttime;
输出示例:
| SEQUENCE_NO | LC_NO | STATE | AMOUNT | CHANGE_TIME | OP |
|---|---|---|---|---|---|
| LC202601001 | LC001 | 00 | 50000 | 2026-01-05 09:12 | I |
| LC202601001 | LC001 | 01 | 50000 | 2026-02-10 14:30 | U |
| LC202601001 | LC001 | 02 | 48000 | 2026-06-20 11:05 | U |
| LC202601001 | LC001 | 03 | 48000 | 2026-08-28 09:00 | U |
3.2 统计变更审计
-- 查看某段时间内该表被修改了多少次
SELECT
TO_CHAR(versions_starttime, 'YYYY-MM-DD') AS change_date,
versions_operation AS op,
COUNT(*) AS cnt
FROM ccm.T_LC
VERSIONS BETWEEN TIMESTAMP
(SYSTIMESTAMP - INTERVAL '30' DAY)
AND (SYSTIMESTAMP)
GROUP BY TO_CHAR(versions_starttime, 'YYYY-MM-DD'), versions_operation
ORDER BY change_date;
-- 找出谁修改了特定记录(结合 flashback_transaction_query)
SELECT xid, operation, undo_sql, commit_timestamp
FROM flashback_transaction_query
WHERE table_name = 'T_LC' and TABLE_OWNER = 'CCM'
AND operation = 'UPDATE'
AND start_timestamp > SYSTIMESTAMP - INTERVAL '7' DAY;
3.3 数据恢复
-- 场景:某条记录被误修改,恢复到 2 小时前的值
UPDATE ccm.T_LC l
SET (lc_no, state, sub_state, amount) = (
SELECT lc_no, state, sub_state, amount
FROM ccm.T_LC
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR)
WHERE sequence_no = l.sequence_no
)
WHERE l.sequence_no = 20260930;
COMMIT;
-- 场景:批量恢复被误删的数据
INSERT INTO ccm.T_LC
SELECT * FROM ccm.T_LC
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR)
WHERE state = '03'
MINUS
SELECT * FROM ccm.T_LC
WHERE state = '03';
四、FDA 管理操作
4.1 修改 FDA 配置
-- 修改保留期限
ALTER FLASHBACK ARCHIVE fda_1year
MODIFY RETENTION 2 YEAR; -- 从 1 年改为 2 年
-- 修改表空间配额
ALTER FLASHBACK ARCHIVE fda_1year
MODIFY TABLESPACE fda_data QUOTA 20G; -- 从 10G 改为 20G
-- 添加表空间
ALTER FLASHBACK ARCHIVE fda_1year
ADD TABLESPACE fda_data2 QUOTA 10G;
-- 移除表空间(不会删除已有数据)
ALTER FLASHBACK ARCHIVE fda_1year
REMOVE TABLESPACE fda_data2;
📖 官方文档:ALTER FLASHBACK ARCHIVE — Oracle Database 19c SQL Language Reference
4.2 清理 FDA 数据
-- 清理指定时间之前的归档数据(比保留期更早地清理)
ALTER FLASHBACK ARCHIVE fda_1year
PURGE BEFORE TIMESTAMP
(TO_TIMESTAMP('2026-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
-- 清理指定 SCN 之前的数据
ALTER FLASHBACK ARCHIVE fda_1year
PURGE BEFORE SCN 5000000;
-- 清理所有数据
ALTER FLASHBACK ARCHIVE fda_1year PURGE ALL;
4.3 禁用/移除表的 FDA
-- 禁用表的 FDA(停止继续归档,已归档的历史数据保留)
ALTER TABLE ccm.T_LC NO FLASHBACK ARCHIVE;
-- 删除 Flashback Archive(需先禁用所有关联的表)
DROP FLASHBACK ARCHIVE fda_30day;
📖 官方文档:DROP FLASHBACK ARCHIVE — Oracle Database 19c SQL Language Reference
4.4 对启用 FDA 的表执行 DDL(19c 支持)
-- 19c 支持对 FDA 表执行以下 DDL:
ALTER TABLE ccm.T_LC ADD (remark VARCHAR2(200));
ALTER TABLE ccm.T_LC MODIFY (amount NUMBER(20,2));
ALTER TABLE ccm.T_LC DROP COLUMN remark;
ALTER TABLE ccm.T_LC RENAME COLUMN state TO lc_state;
-- 不支持的 DDL:
-- ALTER TABLE ... DROP PRIMARY KEY
-- ALTER TABLE ... DROP PARTITION(部分限制)
-- TRUNCATE TABLE(会清空归档历史中该表关联的行追踪)
五、监控与运维
5.1 监控 FDA 存储使用
-- 1. FDA 整体空间使用
SELECT
df.tablespace_name,
fa.flashback_archive_name,
fb.retention_in_days,
ROUND(SUM(df.bytes) / 1024 / 1024, 2) AS total_mb,
ROUND(SUM(df.bytes) / 1024 / 1024 -
SUM(NVL(fs.bytes, 0)) / 1024 / 1024, 2) AS used_mb,
ROUND(SUM(NVL(fs.bytes, 0)) / 1024 / 1024, 2) AS free_mb,
ROUND((1 - SUM(NVL(fs.bytes, 0)) / SUM(df.bytes)) * 100, 2) AS used_pct
FROM dba_flashback_archive_ts fa
JOIN dba_flashback_archive fb
ON fa.flashback_archive_name = fb.flashback_archive_name
JOIN dba_data_files df
ON fa.tablespace_name = df.tablespace_name
LEFT JOIN dba_free_space fs
ON df.tablespace_name = fs.tablespace_name
GROUP BY df.tablespace_name, fa.flashback_archive_name, fb.retention_in_days
ORDER BY used_pct DESC;
-- 2. 各表归档数据量
SELECT
owner_name,
table_name,
flashback_archive_name,
archive_table_name,
status
FROM dba_flashback_archive_tables;
-- 3. 查看内部归档表大小
SELECT
segment_name,
tablespace_name,
ROUND(bytes / 1024 / 1024, 2) AS size_mb
FROM dba_segments
WHERE segment_name LIKE 'SYS_FBA%'
AND owner = 'SYS'
ORDER BY bytes DESC;
-- 4. 表空间整体使用率
select count(*) from dba_recyclebin;
col TABLESPACE_NAME for a30
set pages 456
SELECT a.tablespace_name,round(total/1024/1024/1024) "Total g",
round(free/1024/1024/1024) "Free g",ROUND((total-free)/total,4)*100 "USED%"
FROM (SELECT tablespace_name,SUM(bytes) free FROM DBA_FREE_SPACE
GROUP BY tablespace_name ) a,
(SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES where tablespace_name LIKE 'FDA%'
GROUP BY tablespace_name) b
WHERE a.tablespace_name=b.tablespace_name
ORDER BY 4;
5.2 监控 FBDA 进程状态
-- 查看 FBDA 后台进程
!ps -ef | grep fbda
SELECT pid,spid,program FROM v$process WHERE program LIKE '%FBDA%';
-- 查看 FBDA 进程活动
SELECT sid, serial#, username, program, status, last_call_et
FROM v$session
WHERE program LIKE '%fbda%';
-- 跟踪 FBDA 活动(调试用)
ALTER SESSION SET EVENTS '19500 trace name context forever, level 3';
5.3 FDA 性能优化
-- 1. 调整 FBDA 进程采集频率(默认 5 秒)
-- 更大值 = 更低开销,但历史数据延迟更大
ALTER SYSTEM SET "_fbda_process_interval" = 10; -- 10秒
-- 2. 调整 FBDA 进程数(默认 1 个,大负载场景可增加)
ALTER SYSTEM SET "_fbda_processes" = 2;
-- 3. 优化归档表空间存储
-- 对内部归档表启用压缩(减少存储占用)
ALTER TABLE SYS.SYS_FBA_HIST_XXXXX MOVE COMPRESS;
-- 4. 为内部归档表创建索引(加速查询)
-- 查看归档表名
SELECT archive_table_name
FROM dba_flashback_archive_tables
WHERE table_name = 'T_LC';
-- 为常用查询字段添加索引
CREATE INDEX SYS.idx_fba_hist_lc_rid
ON SYS.SYS_FBA_HIST_XXXXX (RID);
六、生产环境完整部署脚本
以下是一个完整的、可直接执行的部署脚本:
-- ============================================================
-- Oracle 19c Flashback Data Archive 完整部署脚本
-- 业务场景:核心业务表 T_LC 需保留 5 年历史变更
-- ============================================================
-- STEP 1: 创建 FDA 专用表空间
CREATE TABLESPACE fda_data
DATAFILE '/u01/oracle/oradata/JiekeXu/fda_data01.dbf' SIZE 2G
AUTOEXTEND ON NEXT 500M MAXSIZE 30G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
-- STEP 2: 创建 Flashback Archive
CREATE FLASHBACK ARCHIVE DEFAULT fda_default
TABLESPACE fda_data
QUOTA 10G
RETENTION 1 YEAR;
CREATE FLASHBACK ARCHIVE fda_compliance
TABLESPACE fda_data
QUOTA 30G
RETENTION 5 YEAR;
-- STEP 3: 授权
GRANT FLASHBACK ARCHIVE ADMINISTER TO ccm;
GRANT FLASHBACK ARCHIVE ON fda_compliance TO ccm;
GRANT FLASHBACK ARCHIVE ON fda_default TO ccm;
GRANT FLASHBACK ANY TABLE TO ccm;
-- STEP 4: 为核心业务表启用 FDA
ALTER TABLE ccm.T_LC FLASHBACK ARCHIVE fda_compliance;
-- 如有多张表需要启用
-- ALTER TABLE ccm.T_CONTRACT FLASHBACK ARCHIVE fda_compliance;
-- ALTER TABLE ccm.T_PAYMENT FLASHBACK ARCHIVE fda_compliance;
-- STEP 5: 验证
SELECT
owner_name,
table_name,
flashback_archive_name,
archive_table_name,
status
FROM dba_flashback_archive_tables;
-- STEP 6: 测试查询
SELECT * FROM ccm.T_LC
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY)
WHERE ROWNUM <= 10;
七、注意事项与常见问题
7.1 限制与约束
| 限制项 | 说明 |
|---|---|
| 不支持的对象 | 临时表、外部表、对象表、IOT、物化视图 |
| TRUNCATE | TRUNCATE 后归档中的历史追踪断裂,但已归档数据仍可查 |
| DROP TABLE | DROP 表不会删除 FDA 归档数据,需手动清理 |
| 分区操作 | 部分分区 DDL 有限制(如 exchange partition) |
| 数据导入 | 直接路径导入(/*+ APPEND */、impdp)的数据也会被归档 |
| 空间 | 高 DML 频率的表归档数据增长快,需监控空间 |
7.2 常见问题
Q1:启用 FDA 后 DML 变慢了?
-- 检查 FBDA 进程是否正常
SELECT * FROM v$process WHERE program LIKE '%FBDA%';
-- 检查归档表空间是否已满
SELECT * FROM dba_flashback_archive_ts;
-- 如果表空间配额已满,FBDA 会暂停,UNDO 数据堆积
-- 解决:增加配额
ALTER FLASHBACK ARCHIVE fda_compliance
MODIFY TABLESPACE fda_data QUOTA 60G;
Q2:闪回查询报 ORA-55612?
-- 原因:FBDA 进程未及时将 UNDO 数据写入归档
-- 解决:等待 FBDA 进程下次采集,或手动触发
-- 检查进程
SELECT pid,spid,program FROM gv$process WHERE program LIKE '%FBDA%';
-- 如果进程不存在,重启数据库会自动启动
Q3:如何估算 FDA 存储需求?
预估公式:
FDA 存储需求 ≈ 日均 DML 行数 × 平均行大小 × 2(含元数据开销)× 保留天数
示例:
日均 DML 行数:50,000
平均行大小:500 字节
保留 5 年
50,000 × 500B × 2 × 365 × 5 ≈ 91 GB
Q4:能否对已启用的表修改 FDA 策略?
-- 可以,切换到另一个 FDA
ALTER TABLE ccm.T_LC NO FLASHBACK ARCHIVE;
ALTER TABLE ccm.T_LC FLASHBACK ARCHIVE fda_5year;
-- 注意:切换期间会有短暂的保护空窗期
Q5:如何彻底清除某张表的 FDA 归档数据?
-- 1. 先禁用 FDA
ALTER TABLE ccm.T_LC NO FLASHBACK ARCHIVE;
-- 2. 找到内部归档表
SELECT archive_table_name
FROM dba_flashback_archive_tables
WHERE table_name = 'T_LC' and table_owner='CCM';
-- 3. 手动删除内部归档表(需 SYS 用户)
-- DROP TABLE SYS.SYS_FBA_HIST_XXXXX PURGE;
-- DROP TABLE SYS.SYS_FBA_TCRV_XXXXX PURGE;
-- DROP TABLE SYS.SYS_FBA_DL_XXXXX PURGE;
八、与合规场景结合
FDA 在金融行业常见的合规要求中的应用:
| 合规要求 | FDA 对应能力 |
|---|---|
| 数据修改留痕 | ✅ 自动记录所有 DML 变更 |
| 历史数据可追溯 | ✅ 支持查询任意时间点的数据状态 |
| 数据不可篡改 | ✅ 归档数据由 Oracle 内部管理,应用无法直接修改 |
| 保留期限合规 | ✅ RETENTION 参数精确控制,到期自动清理 |
| 审计报表 | ✅ VERSIONS BETWEEN 提供完整变更时间线 |
九、Oracle 19c 官方文档参考链接
SQL 语法参考
| 语句 | 链接 |
|---|---|
| CREATE FLASHBACK ARCHIVE | Oracle Database 19c SQL Language Reference |
| ALTER FLASHBACK ARCHIVE | Oracle Database 19c SQL Language Reference |
| DROP FLASHBACK ARCHIVE | Oracle Database 19c SQL Language Reference |
数据字典视图参考
| 视图 | 链接 |
|---|---|
| DBA_FLASHBACK_ARCHIVE | Oracle Database 19c Reference |
| DBA_FLASHBACK_ARCHIVE_TS | Oracle Database 19c Reference |
| DBA_FLASHBACK_ARCHIVE_TABLES | Oracle Database 19c Reference |
| USER_FLASHBACK_ARCHIVE | Oracle Database 19c Reference |
| USER_FLASHBACK_ARCHIVE_TABLES | Oracle Database 19c Reference |
管理与运维参考
| 文档 | 链接 |
|---|---|
| Tablespace 管理 | Oracle Database 19c Administrator’s Guide — Managing Tablespaces |
总结: FDA 是 Oracle 19c 中实现长期数据审计与合规的核心方案,关键在于合理规划表空间容量、保留期限和监控 FBDA 进程健康状态。对于金融场景的 1 年 3 年 5 年等合规留存,建议初始分配 30G+ 表空间配额,并定期监控空间增长。
如果这篇文章对你有帮助,欢迎点赞、在看、转发三连,转给你团队里里的兄弟。
关注「JiekeXu DBA 之路」,数据库路上不迷路。 我们下篇见。
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————





