Flashback archive
在Oracle 10g中的lashback 包括: flashbackversion query、flashback transaction query、flashback database、flashbacktable和flashback drop等。 在这些闪回技术当中,除了Flashback Database(依赖于闪回日志)之外,其他的闪回技术都是依赖于Undo撤销数据,都与数据库初始化参数UNDO_RETENTION密切相关。
从undo中读取信息来构造旧数据的,这样就有一个限制,就是undo中的信息不能被覆盖。而undo段是循环使用的,只要事务提交,之前的undo信息就可能被覆盖,虽然可以通过 undo_retention等参数来延长undo的存活期,但这个参数会影响所有的事务,设置过大,可能导致undo tablespace快速膨胀。
Oracle11g中flashback增加了Flashback Data Archive 特性。该技术与之前的Flashback的实现机制不同,通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。并且可以根据需要指定哪些数据库对象需要保存历史变化数据,而不是将数据库中所有对象的变化数据都保存下来,这样可以极大地减少空间需求。
FlashbackData Archive并不是记录数据库的所有变化,而只是记录了指定表的数据变化。所以,Flashback Data Archive是针对对象的保护,是Flashback Database的有力补充。
通过FlashbackData Archive,可以查询指定对象的任何时间点(只要满足保护策略)的数据,而且不需要用到undo,这在有审计需要的环境,或者是安全性特别重要的高可用数据库中,是一个非常好的特性。缺点就是如果该表变化很频繁,对空间的要求可能很高。
闪回数据归档区是闪回数据归档的历史数据存储区域,在一个系统中,可以有一个默认的闪回数据归档区,也可以创建其他许多的闪回数据归档区域。 每一个闪回数据归档区都可以有一个唯一的名称。同时,每一个闪回数据归档区都对应了一定的数据保留策略。
Flashback archive 的限制条件
(1)Flashback data archive只能在ASSM的tablespace上创建
(2)Flashback data archive要求必须使用自动undo管理,
即 undo_management 参数为auto
对表启用Flashback archive,并使用默认的Flashback archive。
(1). You have the FLASHBACK ARCHIVE object privilege on theFlashback Data Archive to use for that table.
(2). The table is neither nested, clustered, temporary,remote, or external.
(3). The table contains neither LONG nor nested columns.
赋予权限grant flashback archive administer to stat;
实施步骤如下
1 创建表空间
Createtablespace fd1 datafile '/home/oracle/app/oracle/oradata/esb/fda4.dbf' size200m;
Create tablespace fd2datafile '/home/oracle/app/oracle/oradata/esb/fda5.dbf' size 200m;
1.2创建Flashback Archive(只能有一个默认的)
create flashbackarchive fla1 tablespace fd1 retention 7 day/month/year;
create flashbackarchive default fla2 tablespace fd2 quota 10M retention 1 year;
alter flashback archive fla set default--设置默认闪回归档
1.3启用archive
SQL> alter table test flashback archive;
Table altered.
启用Flashback archive,并指定FlashabackArchive 区。
SQL> alter table testflashback archive fla1;
Table altered.
1.4 禁用表的Flashback Archive
SQL> alter table test no flashbackarchive;
Table altered.
1.5 清空Flashback Archive 中超过1天的历史数据
SQL> alter flashback archive fla1 purge beforetimestamp (systimestamp - interval '1' day);
Flashback archive altered.
清空Flashback Archive 中指定SCN 之前的所有历史数据
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1315755078
alter flashback archive fla1 purge before scn 1315755078
清空Flashback Archive中的所有历史记录
SQL> alter flashback archive fla1 purgeall;
Flashback archive altered.
Archive的操作
修改已经存在的FlashbackArchive 为default
SQL> alter flashback archive fla1 set default;
Flashback archive altered.
将表空间从Flashback Archive中移除
SQL> alter flashback archive fla1 removetablespace fda4;
Flashback archive altered
启动Flashback Data Archive的表支持以下的DDL 操作
(1)ALTER TABLE statement that does any of the following:
1)Adds, drops,renames, or modifies a column
2)Adds, drops,or renames a constraint
3)Drops ortruncates a partition or subpartition operation
(2)TRUNCATETABLE statement
(3)RENAMEstatement that renames a table
Flashback archive相关数据字典
select * fromdba_flashback_archive;
select * fromdba_flashback_archive_ts;
select * fromdba_flashback_archive_tables;
Flashback archive的后台进程
Oracle11g为Flashbackdata archive特性专门引入了一个新的后台进程FBDA,用于将追踪表(traced table,也就是将指定使用flashback data archive的table)的历史变化数据转存到闪回归档区。
11.2.0.2 支持add,drop column,还支持truncatetable,不支持drop table
11.1.0.7只支持add column,如果要做其它的操作,需要清除以前的记录跟踪,需要重新开始.