暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

闪回数据归档(Flashback Data Archive)

闪回数据归档(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回溯到多年以前。 2flashback 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 TABLEUPGRADE TABLE 操作; 5 droprename、trunacte表(12.1可以truncate)。
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论