Flashback version query and Flashback transaction query

一、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 undo   




 
Flashback version query & flashback transaction query)的局限性:
依赖于回滚数据,所以对于较早的误操作无能为力,那时得借助logminer挖掘日志了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值