您好,欢迎访问一九零五行业门户网

闪回事务查询Flashback Transaction Query

继续聊聊flashback家庭成员。flashback version query、flashback query和本次介绍的flashback transaction query相同,都是依赖
继续聊聊flashback家庭成员。flashback version query、flashback query和本次介绍的flashback transaction query相同,,都是依赖于undo表空间的过期数据。和version query和query不同的是,flashback transaction query将数据变化的粒度细化到了事务级别,而且支持用户进行undo操作,准备好相关的sql语句。
1、实验环境
笔者使用oracle 11g进行实验,具体实验版本是11.2.0.4。
sql> select * from v$version;
banner
--------------------------------------------------------------------------------
oracle database 11g enterprise edition release 11.2.0.4.0 - 64bit production
pl/sql release 11.2.0.4.0 - production
core    11.2.0.4.0 production
tns for linux: version 11.2.0.4.0 - production
nlsrtl version 11.2.0.4.0 – production
使用flashback transaction有两个条件,一个是使用自动automatic undo management,另一个不是必须,但是建议设置的是添加补充日志supplemental redo log。
sql> show parameter undo;
name                                type        value
------------------------------------ ----------- ------------------------------
undo_management                      string      auto
undo_retention                      integer    9000
undo_tablespace                      string      undotbs1
sql> select supplemental_log_data_min from v$database;
supplemental_log_data_min
-------------------------
yes
默认的undo_retention大小为900秒,为了实验方便设置为9000秒。
数据环境构建,创建简单数据表。
sql> create table test as select empno, sal from scott.emp;
table created
sql> select * from test;
empno      sal
----- ---------
 7369    800.00
 7499  1600.00
 7521  1250.00
(篇幅原因,有省略……)
 7934  1300.00
14 rows selected
2、操作实验
flashback transaction query的核心,就是将日志以事务+数据行的修改粒度在flashback_transaction_query中查询到。
flashback_transaction_query视图是oracle提供给用户进行操作日志查询的接口。在其中,可以看到对应一个数据表、数据行和事务进行的所有数据操作。
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           
下面进行简单的修改。
sql> update test set sal=100 where empno=7369;
1 row updated
sql> commit;
commit complete
根据owner和table_name,可以找到数据记录。
sql> select xid, start_scn, commit_scn, row_id, operation,undo_sql from flashback_transaction_query where table_owner='sys' and table_name='test';
xid              start_scn commit_scn row_id              operation  undo_sql
---------------- ---------- ---------- ------------------- ------------------------------------------------------------------------------------
0900130035060000    1939850    1939857 aaav4eaabaaarfpaaa  update    update sys.test set sal = '800' where rowid = 'aaav4eaabaaarfpaaa';
在其中,可以看到对数据表test进行的操作事务信息,修改数据行rowid。最重要有意思的是oracle还将逆转事务操作使用的sql语句。
undo_sql的存在,就给用户提供一种手工逻辑恢复数据的能力。注意:如果supplemental log data不开启,这个数据是不会显示的。
下面借助flashback version query,检查一下刚刚修改。
sql> select versions_xid xid,versions_startscn, versions_endscn, versions_operation, test.* from test versions between scn minvalue and maxvalue;
xid              versions_startscn versions_endscn versions_operation empno      sal
---------------- ----------------- --------------- ------------------ ----- ---------
其它类似信息

推荐信息