Oracle Flashback技术之Flashback Query

来源:互联网 发布:卖家怎么玩好淘宝客 编辑:程序博客网 时间:2024/05/21 20:24

Oracle Flashback家族有四个成员,分别是以下:

Flashback Database  ——闪回数据库

Flashback Drop     ——闪回删除
Flashback Table    ——闪回表

Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query) ——闪回查询

今天主要讲下Flashback Query技术:

Flashback Query(利用UNDO保留信息恢复

1、Flash Version Query(利用UNDO保留信息恢复)
Oracle Flashback Version Query特性,利用保存的回滚信息,可以看到特定的表在时间段内的任何修改,如电影的回放一样,可以了解表在该期间的任何变化。Flashback version query一样依赖于AUM,提供了一个查看行改变的功能,能找到所有已经提交了的行的记录,分析出过去时间都执行了什么操作。Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法:

(1)使用as of timestamp来进行闪回查询:

SQL> select * from tb1 as of timestamp  to_timestamp('2010-10-25 17:26:08','yyyy-mm-dd hh24:mi:ss')

        minus select * from tb1;(所得结果就是误操作的数据
(2)使用as of scn来进行闪回查询:

SQL> select * from tb1 as of scn  ***;

SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;(
查询事务的xid信息

注意:由以上可知,通过闪回查询获得所需的记录信息,然后来构造新的DML语句并实施其操作来保证数据的完整性。


2、Flash Transaction Query(利用UNDO保留信息恢复)

Oracle Flashback Transaction Query特性确保检查数据库的任何改变在一个事务级别,可以利用此功能进行诊断问题、性能分析和审计事务。它其实是Flashback Version Query查询的一个扩充,Flashback Version Query说明了可以审计一段时间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而Flashback Transaction Query提供了从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及Undo_sql(回滚事务对应的sql语句),也就是说审计一个事务到底做了什么,甚至可以回滚一个已经提交的事务。

想要获得已提交事务的XID,就必须通过上面的Flashback Version Query

SQL>select * from FLASHBACK_TRANSACTION_QUERY where xid=’04001F0035000000’;
UNDO_SQL

--------------------
insert into "FLASHTEST"."TEST"("ID") values (’2’);

alter database add supplemental log data;(有时候可能查询到undo_sql为空,是因为supplement logging被禁用了,需要开启)
注意:这个删除语句对应的是1个Insert语句,如果想回滚这个事务,执行这个Insert语句即可。

可以看到,Flashback Transaction Query主要用于审计一个事务,并可以回滚一个已经提交的事务。如果确定出错的事务是最后一个事务,我们利用Flashback Table或者Flashback Query就可以解决问题。但是,如果执行了一个错误的事务之后,又执行了一系列正确的事务,那么上面的方法就无能为力,利用Flashback Transaction Query可以查看或回滚这个错误的事务。

0 0
原创粉丝点击