ITPub博客

首页 > 数据库 > Oracle > Flashback Archive

Flashback Archive

原创 Oracle 作者:oracle11111 时间:2025-06-26 11:13:00 0 删除 编辑

 一、核心概念

功能定位

Flashback Archive(FBDA)是Oracle 11g引入的特性,用于长期存储表的历史变化数据,支持基于时间点或SCN的历史查询,满足审计、合规性需求。

与归档日志的区别:归档日志记录Redo日志用于灾难恢复,而FBDA存储UNDO数据用于历史追溯。

别称:Oracle Total Recall(全面回忆),强调其完整回溯能力。



核心机制

后台进程FBDA:异步捕获表数据变更,将历史数据写入专用归档表(如SYS_FBA_HIST_xxx)。

独立存储:数据保存在用户创建的表空间中,与UNDO表空间分离,避免UNDO覆盖导致历史丢失。

压缩与分区:历史数据自动压缩并分区存储,减少空间占用。

二、工作机制

数据捕获流程

当启用FBDA的表发生DML操作时,FBDA进程从数据库缓冲区或UNDO表空间提取变更前的数据。

数据经整理后写入历史表,保留原始行结构(不含索引)。

保留策略

可创建多个FBDA区域,每个关联独立表空间并设置保留期限(如1天、1年甚至20年)。

到期数据自动清理,避免手动维护。

多策略配置示例:

| FBDA名称     | 表空间 | 保留期限 | 适用场景 |

|--------------|--------|----------|----------|

| FBDA_SHORT   | TS_90D | 90天     | 短期审计 |

| FBDA_LEGAL   | TS_20Y | 20年     | 法律合规 |


二、测试:


1 創建  flashback archive 所需表空間



create tablespace tbs1 datafile size 100M autoextend on;


2 創建flashback  archive 

create flashback archive fla1 tablespace tbs1 retention 2 year; 



3  将 Flashback Archive 对象对 Flashback 数据存档 (fla1) 的权限授予存档用户 (zc)。

grant flashback archive on fla1 to ZC;



4 將某張表打開歸檔保存


 alter table ttt  flashback archive fla1;



5 查看当前时间

select to_timestamp(sysdate) from dual;


SQL> select to_timestamp(sysdate) from dual;


TO_TIMESTAMP(SYSDATE)

---------------------------------------------------------------------------

09-JUN-25 12.00.00 AM



6 查看历史数据


select object_id,DATA_OBJECT_ID from ttt   where OBJECT_ID=7788;



update ttt set DATA_OBJECT_ID=DATA_OBJECT_ID+100 where OBJECT_ID=7788;


1 row updated.


-- 查询1小时内所有数据版本


SQL>  SELECT versions_xid, versions_operation, DATA_OBJECT_ID FROM ttt VERSIONS BETWEEN TIMESTAMP SYSTIMESTAMP - INTERVAL '2' HOUR AND SYSTIMESTAMP where OBJECT_ID=7788 ;

0B00150050110000 U


0A001000DA270000 U      7888


7 回退:

alter table ttt   no flashback archive  ;



 

 

 

SQL> select DATA_OBJECT_ID from ttt as of timestamp to_timestamp('2025-06-12 09:11:55','yyyy-mm-dd hh24:mi:ss')   where OBJECT_ID=7788;


DATA_OBJECT_ID

--------------



SQL> select DATA_OBJECT_ID from ttt as of timestamp to_timestamp('2025-06-12 09:12:25','yyyy-mm-dd hh24:mi:ss')   where OBJECT_ID=7788;


DATA_OBJECT_ID

--------------

  7888













































来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69924215/viewspace-3089003/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-19

  • 博文量
    81
  • 访问量
    90380