Flashback Data Archive(转)
自己一直希望找到一篇关于将一个表的一列不小心删除了,怎么来修复,可是一直找不到,自己最近看到一篇在oracle11的一篇文章,特意在这里转一下,没有试过,因为自己的是10,如果那个网友有在10下实现的方法,希望给个链接。
闪回数据归档(Flashback Data Archive)
在Oracle 11g当中,对闪回技术再次进行了扩展,提供了一个全新的flashback方式,称之为闪回数据归档,本节我们将对闪回数据归档进行介绍。
一 闪回数据归档概念
在这里让我们从Oracle 9i开始引进的Flashback Query说起,这是Oracle第一次引入闪回技术,该技术使得一些逻辑误操作不再需要利用归档日志和数据库备份进行时间点恢复。
而在Oracle 10g当中,更是引入flashback version query、flashback transaction query、flashback database、flashback table和flashback drop等特性,大大简化了Flashback Query的使用。
在上面的诸多闪回技术当中,除了Flashback Database(依赖于闪回日志)之外,其他的闪回技术都是依赖于Undo撤销数据,都与数据库初始化参数UNDO_RETENTION密切相关(该参数决定了撤销数据在数据库中的保存时间)。它们是从撤销数据中读取信息来构造旧数据的。这样就有一个限制,就是undo中的信息不能被覆盖。而undo段是循环使用的,只要事务提交,之前的undo信息就可能被覆盖,虽然可以通过 undo_retention等参数来延长undo的存活期,但这个参数会影响所有的事务,设置过大,可能导致undo tablespace快速膨胀。
Oracle 11g则为flashback家族又带来一个新的成员:Flashback Data Archive。该技术与以上所说的诸多闪回技术的实现机制不同,通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。并且可以根据需要指定哪些数据库对象需要保存历史变化数据,而不是将数据库中所有对象的变化数据都保存下来,这样可以极大地减少空间需求。
注意,Flashback Data Archive并不是记录数据库的所有变化,而只是记录了指定表的数据变化。所以,Flashback Data Archive是针对对象的保护,是Flashback Database的有力补充。
通过Flashback Data Archive,可以查询指定对象的任何时间点(只要满足保护策略)的数据,而且不需要用到undo,这在有审计需要的环境,或者是安全性特别重要的高可用数据库中,是一个非常好的特性。缺点就是如果该表变化很频繁,对空间的要求可能很高。
二 闪回数据归档区
闪回数据归档区是闪回数据归档的历史数据存储区域,在一个系统中,可以有一个默认的闪回数据归档区,也可以创建其他许多的闪回数据归档区域。
每一个闪回数据归档区都可以有一个唯一的名称。同时,每一个闪回数据归档区都对应了一定的数据保留策略。例如可以配置归档区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 "USERS" 2 quota 100M
2 retention 1 year;
注意,经过笔者自己在Oracle 11g数据库上运行该语句发现,必须对tablespace关键字后面的表空间名称用" "引起来,否则无法运行成功。
2.在TBS_DATA1上创建fbar_2闪回数据归档区,保留策略为2天
SQL>CREATE FLASHBACK ARCHIVE fbar_2 TABLESPACE "TBS_DATA1"
2 RETENTION 2 DAY;
一个归档区可以不仅仅对应一个表空间,可以采用如下的命令增加或者删除该归档区的表空间的个数,这样也达到了增加或者减少该归档区空间的目的。
3.给数据归档区fbar_2增加一个表空间
SQL>ALTER FLASHBACK ARCHIVE fbar_2 ADD TABLESPACE "TBS_DATA2"
2 QUOTA 100M;
也可以从归档区中删除表空间。注意:这个删除仅仅是表示从数据归档区删除,并不是删除该表空间。
4.删除数据归档区fbar_2的表空间TBS_DATA2
SYS>ALTER FLASHBACK ARCHIVE fbar_2 REMOVE TABLESPACE "TBS_DATA2";
对已经分配给闪回数据归档区的表空间,可以修改归档区对应的磁盘限额。
5.修改归档区的磁盘限额
SYS>ALTER FLASHBACK ARCHIVE fbar_2 MODIFY TABLESPACE "TBS_DATA2"
2 QUOTA 200M;
6.修改归档区的保留策略
SYS>ALTER FLASHBACK ARCHIVE fbar_1 MODIFY RETENTION 1 month;
三 使用闪回数据归档
闪回数据归档区创建完成以后,就可以指定特定的表,使其对应到特定的数据归档区。把表指定到对应的数据归档区有两种方法,一是在创建的时候直接指定归档区,一种是对现有的表指定一个归档区。
注意,如果不指定归档区的名称,则指定到默认归档区,否则,就属于指定的数据归档区。
以下我们基于上一小节所创建的两个闪回数据归档区fbar_1(默认的闪回数据恢复区)和fbar_2,创建了3个表,一个指定到默认归档区fbar_1,一个指定到数据归档区fbar_2,另外一个为了进行对比,没有指定到任何数据归档区。
(1)创建表:
SYS@11gR1>connect scott/tiger
Connected.
scott@11gR1>create table test1(a int) flashback archive;
Table created.
scott@11gR1>create table test2(b int);
Table created.
scott@11gR1>alter table test2 flashback archive data_test2;
Table altered.
scott@11gR1>create table test3(c int);
Table created.
(2)在表中插入数据,完成以后,做select查询显示如下:
09:33:38 scott@11gR1>select * from test2;
B
----------
4
5
6
09:33:43 scott@11gR1>select * from test3;
C
----------
7
8
9
09:33:46 scott@11gR1>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual;
TIME
----
2007-09-04 09:33:52
可以看到,这些数据是在9:33分左右写进去的。最新数据保留策略应当是,表test1对应的是默认的数据归档区fbar_1,数据保留策略是一个月,表test2对应的是数据归档区fbar_2,数据保留策略是2天,而表test3没有数据保留策略。
然后,对这3个表再进行一些操作,如删除现有记录,并插入一些新记录。最后,不使用undo数据,查询时间点2007-09-04 09:33:52,看是否能找回原来的数据。
(3)对表进行更新操作,查询显示结果:
09:34:19 Piner@11gR1>delete from test1;
3 rows deleted.
09:34:23 Piner@11gR1>delete from test2;
3 rows deleted.
09:34:30 Piner@11gR1>delete from test3;
3 rows deleted.
09:34:35 Piner@11gR1>insert into test1 values(10);
1 row created.
09:34:47 Piner@11gR1>insert into test2 values(20);
1 row created.
09:34:53 Piner@11gR1>insert into test3 values(30);
1 row created.
09:34:58 Piner@11gR1>commit;
Commit complete.
09:36:32 Piner@11gR1>select * from test1;
A
----------
10
09:36:51 Piner@11gR1>select * from test2;
B
----------
20
09:36:56 Piner@11gR1>select * from test3;
C
----------
30
(4)利用Flashback功能去查询数据,发现可以获得正确的数据,但是,不能确认的是,这些数据的获得到底是经过undo获得的还是数据归档区获得的。
09:43:17 Piner@11gR1>select * from test1 as of timestamp
09:43:17 2 to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
A
----------
1
2
3
09:43:17 Piner@11gR1>select * from test2 as of timestamp
09:43:24 2 to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
B
----------
4
5
6
09:43:25 Piner@11gR1>select * from test3 as of timestamp
09:43:30 2 to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
C
----------
7
8
9
(5)为了证明查询使用的是闪回数据归档,创建新的undo表空间,切换undo表空间,为了确保生效,可以重新启动数据库例程。
切换到新的undo表空间,如果没有,需要重新创建:
SYS@11gR1>ALTER SYSTEM SET undo_tablespace=TBS_UNDO2;
System altered.
删除原来的undo表空间:
SYS@11gR1>drop tablespace UNDOTBS1;
Tablespace dropped.
(6)排除了undo查询的可能,再次执行查询:
scott@11gR1> select * from test3 as of timestamp
2 to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
select * from test3 as of timestamp
*
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number with name "" too small
scott@11gR1> select * from test1 as of timestamp
2 to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
A
----------
1
2
3
scott@11gR1> select * from test2 as of timestamp
2 to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
B
----------
4
5
6
可以看到,没有设置数据归档策略的表test3,查询的时候会报01555错误。但是,设置过数据归档策略的test1与test2,都能正常查询到数据,可以看到,数据归档生效了。
这里是一个简单的实验,时间可能远远没有达到设置的策略期,但是,却可以证明数据不是经过undo查询而获得的。
四 清除闪回数据归档区数据
前面为大家介绍过如何给闪回数据归档区增加空间,本节通过一些具体实例为大家介绍如何清除闪回归档区中的数据。
1.清除所有归档区的数据
SQL>ALTER FLASHBACK ARCHIVE data_test1 PURGE ALL;
2.清除一天以前的数据
SQL>ALTER FLASHBACK ARCHIVE data_test1
2 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
3.清除特定SCN之前的数据
SQL>ALTER FLASHBACK ARCHIVE data_test1 PURGE BEFORE SCN 728969;
4.将指定的表不再设置数据归档
SQL>ALTER TABLE test1 NO FLASHBACK ARCHIVE;
5.删除数据归档区
SQL>DROP FLASHBACK ARCHIVE data_test2;
如果将表指定了闪回数据归档区,则不能对表进行如下操作。 |
l 删除,重令名,或者修改列;
l 进行分区或者子分区操作;
l 转换long到lob类型;
l ALTER TABLE… UPGRADE TABLE 操作;
l drop、rename、trunacte表。
例如:
scott@11gR1> drop table test1;
drop table test1
*
ERROR at line 1:
ORA-55610: Invalid DDL statement on history-tracked table
17.8.5 与闪回数据归档有关的视图
可有通过以下视图来得到与闪回数据归档有关的信息。
l DBA_FLASHBACK_ARCHIVE:DBA视图,闪回归档区信息。
l DBA_FLASHBACK_ARCHIVE_TS:DBA视图,闪回归档有关表空间。
l DBA_FLASHBACK_ARCHIVE_TABLES:DBA视图,对应表所对应的闪回归档信息。
l USER_FLASHBACK_ARCHIVE:用户闪回归档区的创建信息。
l USER_FLASHBACK_ARCHIVE_TABLES:用户表对应的闪回归档区域。
小结
本章主要讲述了数据库的闪回技术。闪回是数据库进行逻辑恢复的一个快捷工具。对于Oracle 11g在闪回方面的最新技术——闪回数据归档——也进行了详细的介绍。
Flashback Data Archive(转)相关推荐
- [每日一题] 11gOCP 1z0-053 :2013-09-29 Flashback Data Archive ...................................6...
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12205299 正确答案:A 具体请参考:http://blog.csdn.net/guoy ...
- 闪回之 Flashback Data Archive
背景: Oracle 11g 中 Flashback Data Archive 特性.将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和 undo 区别开来,这样就可以 ...
- oracle 11g Flashback Data Archive(闪回数据归档)
Flashback Data Archive(闪回数据归档) UNDO表空间记录的回滚信息虽然可以提供回闪查询,但时间久了,这些信息会被覆盖掉,其实只要事务一提交,他们就变成可覆盖的对象了,所以经常在 ...
- oracle flashback 功能,Oracle 11g 新特性 Flashback Data Archive 使用实例
Flashback Data Archive(闪回日志归档)其实理解为长时间的保存undo数据,对于某些重要的表可以自定义它的历史记录保存期限,它的的种种行为与undo表空间十分相似,使用的时候也是完 ...
- oracle闪回数据归档,oracle 11g Flashback Data Archive(闪回数据归档)
Oracle 11G提供了丰富的回闪查询功能,对于人为的错误操作,历史数据订正,操作流程记录等有非常大的帮助,下面就来详细介绍下这个特性 回闪查询的原理: Oracle中有UNDO表空间,用来存放数据 ...
- oracle flashback archive,ORACLE Flashback Data Archive
Flashback Data Archive 11g的新功能,有如下特性. 1.在有效期内保存事务改变的信息. 2.FDA包含一个或多个表空间,可以创建多个FDA,以sysdba登陆时,可以指定默认的 ...
- oracle flashback6,【oracle】闪回flashback-11g-flashback data Archive
Flashback data Archive 1.说明 Flashback data archive在它的有效期内将保存事物改变的信息. FDA包含一个或者多个表空间,我们可以创建多个FDA,当以sy ...
- Flashback archive
Flashback archive 在Oracle 10g中的lashback 包括: flashbackversion query.flashback transaction query.flash ...
- Oracle Study学习之--Flashback Archive
Oracle Study学习之--Flashback Archive CREATE FLASHBACK ARCHIVE Purpose Use the CREATE FLASHBACK ARCHIVE ...
最新文章
- Facebook是如何做搜索的?
- path classpath
- 不要上手就学深度学习!超详细的人工智能专家路线图,GitHub数天获2.1k星
- StrUtils.DupeString - 反复字符串
- 直播预告 | 双边分支网络BBN:攻坚长尾分布的现实世界任务
- linux ls使用方法,Linux/Ubuntu ls命令详解使用格式和方法
- 云南省农村信用社计算机岗位待遇如何,云南农村信用社薪资待遇如何?
- 解决win7的outlook打不开的问题
- 挖掘城市ip_抖in杭州嘉年华,原来城市营销还能这么玩!
- electron 解压zip_node.js实现简单的压缩/解压缩功能示例
- mysql8.0 的新特性_What's New In MySQL 8.0(MySQL 8.0 新特性)
- Axis1.x WebService开发指南—目录索引
- MySQL查看锁及事务隔离级别的命令
- VS编程,WPF控件增加图片背景的一种方法
- 洛谷 P1757 通天之分组背包 C++ dp
- mysql 时区时间_MySql的时区(serverTimezone)引发的血案
- 微型计算机使用的crt信号,《微型计算机及其接口技术》课程学习方法篇(2)...
- 想要了解大厂PM吗,来看看这几款软件
- ZUCC_BB平台-Quiz B-3-7-答案
- 穷举n位二进制数(深搜)noj
热门文章
- python接口测试-项目实践(八) 完成的接口类和执行脚本
- laravel5.5事件系统
- WebGL 利用FBO完成立方体贴图。
- ant 合并 jar
- 如何搭建服务器 无线传输,iOS 本地搭建服务器使用http传送(wifi快传)
- linux 进程装入 物理内存 页表,linux内存管理解析----linux物理,线性内存布局及页表的初始化...
- 1732: 数花费(Kruscal)
- Applese 涂颜色(欧拉定理降幂+快速幂)
- 悟空分词与mysql结合_Mysql联合查询UNION和UNION ALL的使用介绍
- 开放下载!《一站式大数据开发治理DataWorks使用宝典》