一、Flashback version query
versions_operation: DML活动类型,I,U,D。
versions_xid: 事务编号
versions_starttime: 开始时间
versions_endtime: 结束时间,如果有值,证明这记录已非当前记录
versions_startscn: 开始SCN号
versions_endscn: 结束SCN号 如果有值,证明这记录已非当前记录
语法:
SELECT <column1>,… FROM <table>
VERSION BETWEEN [ SCN | TIMESTAMP ] [ <expr> | MAXVALUE] AND <expr> | MINVALUE]
| AS OF [SCN |TIMESTAMP ] <expr>;
sql>select * from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON sql>update dept set loc='BEIJING' where loc='BOSTON'; 1 row updated. sql>COMMIT; Commit complete. sql>update dept set loc='SHANGHAI' where loc='CHICAGO'; 1 row updated. sql>commit; Commit complete. sql>select * from dept versions between scn minvalue and maxvalue where DEPTNO=40; DEPTNO DNAME LOC ---------- -------------- ------------- 40 OPERATIONS BEIJING 40 OPERATIONS BOSTON sql>update dept set LOC='BEIJING' where DNAME='OPERATIONS'; 1 row updated. sql>commit; Commit complete. sql>select * from dept versions between scn minvalue and maxvalue where DEPTNO=40; DEPTNO DNAME LOC ---------- -------------- ------------- 40 OPERATIONS BEIJING 40 OPERATIONS BEIJING 40 OPERATIONS BOSTON sql>select versions_xid xid,versions_startscn,versions_endscn,versions_operation,DEPTNO,DNAME,LOC from dept versions between scn minvalue and maxvalue where DEPTNO=40; XID VERSIONS_STARTSCN VERSIONS_ENDSCN V DEPTNO DNAME LOC ---------------- ----------------- --------------- - ---------- -------------- ------------- 020017005A710100 105407305 U 40 OPERATIONS BEIJING 105407305 40 OPERATIONS BEIJING
可以看出,对应数据的版本是以影响到该行数据更改,并最终提交。每次commit生成一个对应的版本。在between scn minvalue and maxvalue后面加上as of scn 指定该scn到当前scn的所有版本。
使用timestamp:versions between timestampto_timestamp('2013/06/2319:17:00','yyyy/mm/dd hh24:mi:ss') and to_timestamp('2013/06/2319:20:00','yyyy/mm/dd hh24:mi:ss')
二、Flashback transaction query
闪回事务查询是一种诊断工具,用于帮助识别数据库发生的事务级变化,可以用于事务审计的数据分析。通过闪回事务分析,可以识别在一个特定的时间段内所发生的所有变化,也可以对数据库表进行事务级恢复。
闪回事务查询的基础仍然是依赖于撤销数据(Undodata),它也是利用初始化的数据库参数UNDO_RETENTION来确定已经提交的撤销数据在数据库的保存时间。
Flashback Version Query和Flashback Transaction Query需要配合使用。我们在前面介绍的Flashback Version Query可以实现审计一段时间内表的所有改变,但是这仅仅是发现在某个时间段内所进行过的操作,对于错误的事务还不能进行撤销处理。而Flashback Transaction Query可实现撤销处理,因为可以从FLASHBACK_TRANSACTION_QUERY中获得事务的历史操作并撤销语句(undo_sql)。也就是说,我们可以审计一个事务到底做了什么,也可以撤销一个已经提交的事务。
Flashback Version Query的xid与Flashback Transaction Query的xid的转换需要用到的一个函数HEXTORAW,Flashback Transaction Query的xid等于HEXTORAW(Flashback Version Query的xid)。
闪回事务查询依赖于flashback_transaction_query。注意,这个表中也记录了没有提交的事务,如果COMMIT_SCN为空,证明该事务还没有提交。sql> desc flashback_transaction_query Name Type Nullable Default Comments ---------------- -------------- -------- ------- ----------------------------------------- XID RAW(8) Y Transaction identifier START_SCN NUMBER Y Transaction start SCN START_TIMESTAMP DATE Y Transaction start timestamp COMMIT_SCN NUMBER Y Transaction commit SCN COMMIT_TIMESTAMP DATE Y Transaction commit timestamp logoN_USER VARCHAR2(30) Y logon user for transaction UNDO_CHANGE# NUMBER Y 1-based undo change number OPERATION VARCHAR2(32) Y forward operation for this undo TABLE_NAME VARCHAR2(256) Y table name to which this undo applies TABLE_OWNER VARCHAR2(32) Y owner of table to which this undo applies ROW_ID VARCHAR2(19) Y rowid to which this undo applies UNDO_sql VARCHAR2(4000) Y sql corresponding to this undoFlashback version query & flashback transaction query)的局限性: 依赖于回滚数据,所以对于较早的误操作无能为力,那时得借助logminer挖掘日志了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。