Flashback Version Query和Flashback Transaction Query!

Flashback Version Query

SQL> conn /as sysdba
已连接。
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     475124

SQL> conn u1/u1
已连接。
SQL> select * from t;

        ID VALUE
---------- ----------
         1 a
         2 b
         3 c

SQL> delete from t where id = 3;

已删除 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

        ID VALUE
---------- ----------
         1 a
         2 b

SQL> insert into t values(3,'d');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

        ID VALUE
---------- ----------
         1 a
         2 b
         3 d

SQL> update t set value = 'c' where id = 3;

已更新 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

        ID VALUE
---------- ----------
         1 a
         2 b
         3 c

SQL> conn /as sysdba
已连接。
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     475160

SQL> conn u1/u1
已连接。

SQL> select id,value,versions_startscn,versions_endscn,versions_operation,versions_xid from t versions between scn 475124 and 475160;

        ID VALUE      VERSIONS_STARTSCN VERSIONS_ENDSCN V VERSIONS_XID
---------- ---------- ----------------- --------------- - ----------------
         3 c                     475152                 U 0A002D00B5000000
         3 d                     475145          475152 I 08001300EB000000
         3 c                     475136                 D 060015002E010000
         1 a
         2 b
         3 c                                     475136

已选择6行。

Flashback Transaction Query

Flashback的事务查询功能与Flashback版本查询间关系密切,在上面例子中最后的示例查询中,有一个伪列VERSIONS_XID,虽然列举出来但没有具体介绍。其实该列正是Flashback事务查询与版本查询间的关联所在,通过VERSIONS_XID列显示的事务ID关联FLASHBACK_TRANSACTION_QUERY视图查询,能够获得这个事务执行时的很多信息,甚至包括UNDO语句。

SQL> select versions_xid from t versions between scn 475124 and 475160;

VERSIONS_XID
----------------
0A002D00B5000000
08001300EB000000
060015002E010000

SQL> conn /as sysdba
已连接。
SQL> select xid,commit_scn,commit_timestamp,operation,undo_sql from flashback_transaction_query where xid in('0A002D00B5000000','08001300EB000000','060015002E010000');

XID              COMMIT_SCN COMMIT_TIMESTAMP    OPERATION                        UNDO_SQL
---------------- ---------- ------------------- -------------------------------- --------------------------------------------------------------------------------
060015002E010000     475136 2011-10-18 06:32:25 DELETE                           insert into "U1"."T"("ID","VALUE") values ('3','c');
060015002E010000     475136 2011-10-18 06:32:25 BEGIN
08001300EB000000     475145 2011-10-18 06:32:49 INSERT                           delete from "U1"."T" where ROWID = 'AAAMpBAAFAAAAAMAAD';
08001300EB000000     475145 2011-10-18 06:32:49 BEGIN
0A002D00B5000000     475152 2011-10-18 06:33:04 UPDATE                           update "U1"."T" set "VALUE" = 'd' where ROWID = 'AAAMpBAAFAAAAAMAAD';
0A002D00B5000000     475152 2011-10-18 06:33:04 BEGIN

已选择6行。


自动撤销管理表空间

要使用Flashback的相关特性,必须启用自动撤销管理表空间,不单单对于Flashback Query,也包括Flashback Table和Flashback Database,而对于后两项还会有些其他的附加条件,如Flashback Table需要启用了Recycle Bin(回收站),Flashback Database还要求必须启用了Flashback Area(闪回区)。

SQL> show parameter undo_

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

undo_management:值为AUTO表示使用了自动撤销管理表空间,MANUAL则表示手动管理。

undo_retention:该参数用来指定UNDO段中数据保存的最短时间,以秒为单位,是一个动态参数,完全可以在实例运行时随时修改,通常默认是900秒,也就是15分钟。

undo_tablespace:undo表空间。

你可能感兴趣的:(sql,Integer,database,delete,query,insert)