FLASHBACK_TRANSACTION_QUERY view descirbtion
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DBA_TRANSACTION_QUERY 和FLASHBACK_TRANSACTION_QUERY view descirbtion?
FLASHBACK_TRANSACTION_QUERY?Oracle Flashback Version Query特性,利用保存的回滚信息,可以看到特定的表在时间段内的任何修改,如电影的回放一样,可以了解表在该期间的任何变化。Flashback version query一样依赖于AUM,提供了一个查看行改变的功能,能找到所有已经提交了的行的记录,分析出过去时间都执行了什么操作。Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法:
? ? ?在Oracle10g中开始,Flashback支持的恢复级别包括: 这里主要说明事务闪回,先介绍什么事务? ??????? Oracle Flashback Transaction Query特性确保检查数据库的任何改变在一个事务级别,可以利用此功能进行诊断问题、性能分析和审计事务。它其实是Flashback Version Query查询的一个扩充,Flashback Version Query说明了可以审计一段时间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而Flashback Transaction Query提供了从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及Undo_sql(回滚事务对应的sql语句),也就是说审计一个事务到底做了什么,甚至可以回滚一个已经提交的事务。
? ?? 从Oracle10开始可以使用 Oracle Flashback Transaction Query特性 ???2、查看该用户是否具有flashback的权限
??3、在这先备份下dept表的数据,以防丢失现在的表数据(小心驶得万年船)
?? 4、查询什么时间段做哪些操作
提示:对于索引键的update操作,版本查询可能会将其识别成两个操作:DELETE和INSERT。
?????由上面可见刚才事务ID:0A001B00B3040000对dept表进行update操作,事务ID:07001700BB040000进行了delete的操作。事务ID:07002F00BB040000进行了insert操作。
|
SQL>select xid,start_timestamp,operation,table_name,undo_sql from flashback_transaction_query where xid in ('0A001B00B3040000','07001700BB040000','07002F00BB040000') and ?table_name='DEPT'; XID START_TIMESTAMP OPERATION TABLE_NAME UNDO_SQL 1? 07002F00BB040000? 2008-11-29 22:34:33?? INSERT? DEPT?? delete from "SCOTT"."DEPT" where ROWID = 'AAANZrAAEAAAATAAAA'; 2? 07001700BB040000? 2008-11-29 22:25:32? DELETE? DEPT? insert into "SCOTT"."DEPT"("DEPTNO","DNAME","LOC") values ('70','WenYuan','GuangXi'); 3? 0A001B00B3040000? 2008-11-29 22:32:09? UPDATE?? DEPT update "SCOTT"."DEPT" set "LOC" = 'BeiJing' where ROWID = 'AAANZrAAEAAAAS8AAB'; |
如果需要撤销刚才删除的操作,运行insert into "SCOTT"."DEPT"("DEPTNO",'GuangXi');就可以了
撤销其他的操作,则执行与之相对应的redo_sql中的sql语句则可以了。
?
?? 5、需要撤销刚才的删除操作,执行
SQL>insert into "SCOTT"."DEPT"("DEPTNO",'GuangXi'); |
??
???? 需要撤销刚才的更新操作,执行
SQL>update "SCOTT"."DEPT" set "LOC" = 'BeiJing'? where ROWID = 'AAANZrAAEAAAAS8AAB'; |
?? 6、查看dept表的数据是否符合要求,符合要求后删除刚才备份的表
22:53:08 SQL> drop? table? dept_backup20081129; |
?
从上面看出2008-11-29 22:34:33? 插入了哪些数据呢,运行select t.*,rowid from "SCOTT"."DEPT" t where ROWID = 'AAANZrAAEAAAATAAAA';
22:49:49 SQL> select t.*,rowid from "SCOTT"."DEPT" t where ROWID = 'AAANZrAAEAAAATAAAA' |
???
DEPTNO DNAME LOC ?ROWID ---------- ---------- ---------- ------------------ 90 WenYuan ShanDong AAANZrAAEAAAATAAAA |
在2008-11-29 22:25:32又删除了哪些数据呢,可以看出是'70','GuangXi'
在2008-11-29 22:32:09更新的数据是哪些,可以运行select t.*,rowid from "SCOTT"."DEPT" t where ROWID = 'AAANZrAAEAAAAS8AAB';
22:53:07 SQL>select t.*,rowid from "SCOTT"."DEPT" t where ROWID = 'AAANZrAAEAAAAS8AAB'; |
DEPTNO DNAME LOC ROWID ---------- ---------- ---------- ------------------ 10 ACCOUNTING ShanXi AAANZrAAEAAAAS8AAB |
?由此对比数据可知:该数据的loc字段由“BeiJing”更新为“ShanXi”。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!