概述
Oracle11g 闪回事务查询就是对过去某段时间内所完成的事务的查询和撤销,通过闪回事物分析,可以识别在一个特定的时间段内所发生的所有变化,也可以对数据库表进行事物级恢复。 前面提到可以审计一个事务到底做了什么,现在可以获得事务的历史操作进行撤销。
flashback transaction操作过程:
1、查询某段时间内的操作发生情况:
select id,name,versions _operation,versions_xid,versions_starttime from testversions between timestamp minvalue and maxvalue order by id;
2、 根据 XID 对 flashback _transaction_query 进行查询
select table _name,table_owner,undo_sql from flashback_transaction_query wherexid=‘?’
3、运行上面找出的 sql 语句,即可将以前删除的数据恢复回来。
Flashback Transaction Query 也是使用 UNDO 信息来实现。利用这个功能可以查看某个事务执行的所有变化,它需要访问 flashback _transaction_query 视图,这个视图的 XID 列代表事务 ID,利用这个 ID 可以区分特定事务发生的所有数据变化。
实例演示:
先开启附加日志
SQL> create table B(id int); Table created. SQL> insert into B values(1); 1 row created. SQL> insert into B values(2); 1 row created. SQL> insert into B values(3); 1 row created.
查看视图,每个事务都对应相同的XID
SQL>select xid,operation,commit_scn,undo_sql from flashback_transaction_query where xid in (Select versions_xid from B versions between scn minvalue and maxvalue);
删除数据:
SQL> delete from B where id=3; 1 row deleted. SQL> commit; Commit complete.
再次查看视图,每个事务都对应相同的XID
SQL>select xid,operation,commit_scn,undo_sql from flashback_transaction_query where xid in (Select versions_xid from scott.B versions between scn minvalue and maxvalue);
闪回事务查询可以将同一事务的所有撤销SQL列出,这是闪回查询做不到的,如有必要,管理员还能够执行对应一个事务的部分撤销SQL以一种破坏事务原子性的方式恢复一部分数据,如此行事正确与否完全取决于应用的逻辑。
后面会分享更多flashback方面的内容,感兴趣的朋友可以关注下!