闪回数据归档(Flashback Data Archive)
11g 新特性
11g版本的Oracle database 中提供的flashback data archive 能够查看过去任何时间表的状态。使用flashback data archive可以无限期的存储行的前映像。将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,使之可以闪回到指定时间之前的旧数据而不影响undo策略。
Flashback Data Archive并不是记录数据库的所有变化,而只是记录了指定表的数据变化。所以,Flashback Data Archive是针对对象的保护,是Flashback Database的有力补充。
通过Flashback Data Archive,可以查询指定对象的任何时间点(只要满足保护策略)的数据,而且不需要用到undo,这在有审计需要的环境,或者是安全性特别重要的高可用数据库中,是一个非常好的特性。缺点就是如果该表变化很频繁,对空间的要求可能很高。
相比较而言,Oracle的其他闪回技术都有时间限制:例如:
(1)、Flashback database闪回数据库:受闪回日志大小的限制
(2)、Flashback select 闪回查询、闪回事务、闪回表flashback table都受undo retention的限制;
(3)、Flashback drop 收可用表空间大小的限制(11g开始,被删除的表实际是执行了rename操作,并没有实际被删除,通过回收站可以查看)
1、Flashbackup Data Archive的实现原理:
当为一个表启用Flashbackup Data Archive 会创建另外一张表(和其他几个对象),可用于存储行的所有先前的版本,如果愿意可以永远的存储他们,当针对表提交了DML操作后,一个称为flashback data archive(FBDA)的后台进程将捕捉必须的数据,并将他们保存到归档文件中(这里的归档文件?的是flashback data archive的归档文件),因此可以使用flashback data archive回溯到多年以前。
2、flashback data archive数据保存限制及过期数据处理
在创建flashback data archive 时可以执行时间限制,FBDA可以保存该时间点之前所有的数据,过期后的数据会自动删除,FDBA负责在归档中创建对象,根据需要使用行来填充。并清除超过有效期的数据。
3、实践过中的新发现
新发现:在实际的测试过程中发现,flashback data archive还能捕获ddl中的add a column to a table的命令。
每一个闪回数据归档区都可以有一个唯一的名称。同时,每一个闪回数据归档区都对应了一定的数据保留策略。例如可以配置归档区FLASHBACK_DATA_ARCHIVE_1中的数据保留期为1年,而归档区FLASHBACK_DATA_ARCHIVE_2的数据保留期为2天或者更短。以后如果将表放到对应的闪回数据归档区,则就按照该归档区的保留策略来保存历史数据。
闪回数据归档区是一个逻辑概念,是从一个或者多个表空间中拿出一定的空间,来保存表的修改历史,这样就摆脱了对Undo撤销数据的依赖,不利用undo就可以闪回到归档策略内的任何一个时间点上。
创建闪回数据归档区可以使用CREATE FLASHBACK ARCHIVE…命令完成。
复制
下面我们通过一些实例来演示如何来创建闪回数据归档区。
-- 1.创建一个系统默认的、磁盘限额为100MB、保留策略为1年的闪回数据归档区,表空间名称可用""括起来
SQL>create flashback archive default fbar_1 tablespace USERS2 quota 100M retention 1 year;
-- 2.在TBS_DATA1上创建fbar_2闪回数据归档区,保留策略为2天
SQL>CREATE FLASHBACK ARCHIVE fbar_2 TABLESPACE SEN_TBS RETENTION 2 DAY;
-- 一个归档区可以不仅仅对应一个表空间,可以采用如下的命令增加或者删除该归档区的表空间的个数,这样也达到了增加或者减少该归档区空间的目的。
-- 3.给数据归档区fbar_2增加一个表空间
SQL>ALTER FLASHBACK ARCHIVE fbar_2 ADD TABLESPACE USERS2 QUOTA 10M;
-- 也可以从归档区中删除表空间。注意:这个删除仅仅是表示从数据归档区删除,并不是删除该表空间。
-- 4.删除数据归档区fbar_2的表空间TBS_DATA2
SYS>ALTER FLASHBACK ARCHIVE fbar_2 REMOVE TABLESPACE USERS2;
-- 对已经分配给闪回数据归档区的表空间,可以修改归档区对应的磁盘限额。
-- 5.修改归档区的磁盘限额
SYS>ALTER FLASHBACK ARCHIVE fbar_2 MODIFY TABLESPACE SEN_TBS QUOTA 20M;
-- 6.修改归档区的保留策略
SYS>ALTER FLASHBACK ARCHIVE fbar_1 MODIFY RETENTION 1 month;
复制
使用闪回数据归档
闪回数据归档区创建完成以后,就可以指定特定的表,使其对应到特定的数据归档区。把表指定到对应的数据归档区有两种方法,一是在创建的时候直接指定归档区,一种是对现有的表指定一个归档区。
注意,如果不指定归档区的名称,则指定到默认归档区,否则,就属于指定的数据归档区。
以下我们基于上一小节所创建的两个闪回数据归档区fbar_1(默认的闪回数据恢复区)和fbar_2,创建了3个表,一个指定到默认归档区fbar_1,一个指定到数据归档区fbar_2,另外一个为了进行对比,没有指定到任何数据归档区。
create table cog.test1(id int,dt date) flashback archive;
create table cog.test2(id int,dt date);
alter table cog.test2 flashback archive fbar_2;
create table cog.test3(c int,dt date);
select * from DBA_FLASHBACK_ARCHIVE;
select * from DBA_FLASHBACK_ARCHIVE_TABLES;
select * from DBA_FLASHBACK_ARCHIVE_TS;
-- DBA_FLASHBACK_ARCHIVE_TABLES 只有test1和test2有闪回数据归档信息
TABLE_NAME OWNER_NAME FLASHBACK_ARCHI ARCHIVE_TABLE_NAME STATUS
------------------------------ --------------- --------------- ------------------------------ ----------
TEST1 COG FBAR_1 SYS_FBA_HIST_94116 ENABLED
TEST2 COG FBAR_2 SYS_FBA_HIST_94117 ENABLED
复制
测试使用恢复数据
-- 删表测试 (删除表会报失败)
drop table cog.test1 purge;
-- 操作会报错:允许闪回归档的表(enabled for Flashback Archive)不允许DDL 但是允许truncate
-- ORA-55610: Invalid DDL statement on history-tracked table
alter table cog.test1 no flashback archive
-- 插入数据
insert into cog.test1 select rownum id,sysdate dt from dual connect by rownum<=10;
insert into cog.test2 select rownum id,sysdate dt from dual connect by rownum<=20;
insert into cog.test3 select rownum id,sysdate dt from dual connect by rownum<=30;
-- 删除数据 delete or truncate
truncate table cog.test1;
-- 找回数据 - truncate的数据还在
select * from cog.test1 as of timestamp '2021-06-02 22:52:52';
-- truncate是不会记录undo的,可以证明是从闪回数据区
复制
闪回区数据清理
-- 查询闪回区数据
select * from DBA_FLASHBACK_ARCHIVE;
-- 1 清除所有归档区的数据 (清除之后再查就查不到数据了)
ALTER FLASHBACK ARCHIVE FBAR_1 PURGE ALL;
-- 2.清除一天以前的数据
ALTER FLASHBACK ARCHIVE FBAR_1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
-- 3.清除特定SCN之前的数据
ALTER FLASHBACK ARCHIVE FBAR_1 PURGE BEFORE SCN 4489820;
4.将指定的表不再设置数据归档
SQL>ALTER TABLE test1 NO FLASHBACK ARCHIVE;
5.删除数据归档区
SQL>DROP FLASHBACK ARCHIVE data_test2;
限制:如果将表指定了闪回数据归档区,则不能对表进行如下操作。
1 删除,重令名,或者修改列;
2 进行分区或者子分区操作;
3 转换long到lob类型;
4 ALTER TABLE… UPGRADE TABLE 操作;
5 drop、rename、trunacte表(12.1可以truncate)。
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
654次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
624次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
529次阅读
2025-04-20 10:07:02
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
524次阅读
2025-04-08 09:12:48
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
479次阅读
2025-04-22 00:20:37
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
475次阅读
2025-04-17 17:02:24
Oracle 19c RAC更换IP实战,运维必看!
szrsu
456次阅读
2025-04-08 23:57:08
一页概览:Oracle GoldenGate
甲骨文云技术
454次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
449次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
404次阅读
2025-04-17 09:30:30
热门文章
Oracle password 密码策略 密码复杂度
2020-06-24 9740浏览
python paramiko 设置远程ssh执行命令超时限制
2021-06-22 9718浏览
library cache lock 原因及解决方案
2021-05-10 7456浏览
linux Oracle修改ORACLE_SID、修改DB_NAME,修改实例名,服务名
2020-05-31 6123浏览
使用SecureCRT开启图形化界面功能,在Windown显示Linux服务器图形化界面
2020-06-20 5875浏览
最新文章
人大金仓 安装报错ArrayIndexOutOfBoundsException
2025-02-07 73浏览
CRS-42216: No interfaces are configured on the local node for interface definition ib1(:.*)?:10.10.1
2024-08-02 178浏览
opengauss数据库初始化报错:[GAUSS-51607] : Failed to start instance. Error: Please check the gs_ctl log for failure details.
2024-03-05 652浏览
“Oracle_tns_listener远程投毒”故障诊断
2023-11-30 851浏览
ORA-01873 故障处理
2023-11-30 2248浏览