Oracle之闪回操作 (六)

2014-11-24 09:48:23 · 作者: · 浏览: 3

SQL> col vname for a8

SQL> /

SQL> col VERSIONS_STARTTIME for a30

SQL> col VERSIONS_ENDTIME for a30

SQL> /

SQL> set linesize 150

SQL> /

VID VNAME VVERSIONS_STARTTIME VERSIONS_ENDTIME

---------- -------- - ------------------------------

1Tom I 21-9月 -11 11.01.09 上午

2Mary I 21-9月 -11 11.01.24 上午 21-9月 -11 11.02.00 上午

2Mary123 U 21-9月 -11 11.02.00 上午

3Mike I 21-9月 -11 11.01.39 上午

SQL> /*

SQL> selectvid,vname,versions_operation,versions_starttime,versions_endtime

SQL> from versions_table

SQL> versions between timestamp minvalueand maxvalue

SQL> order by 1,4;

SQL> */
SQL> --通过闪回版本查询,可以获取某个表过去已经提交了的历史版本信息

SQL> host cls

SQL> --闪回事务查询

SQL> create table transaction_table

2 (tid number,tnamevarchar(20));

表已创建。

SQL> --第一个事务

SQL> insert into transaction_tableva lues(1,'Tom');

已创建 1 行。

SQL> insert into transaction_table values(2,'Mary');

已创建 1 行。

SQL> insert into transaction_tableva lues(3,'Mike');

已创建 1 行。

SQL> commit;

提交完成。

SQL> --第二个事务

SQL> update transaction_table settname='Mary123' where tid=2;

已更新 1 行。

SQL> delete from transaction_table wheretid=3;

已删除 1 行。

SQL> commit;

提交完成。

l闪回事务查询实际上闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销一个已经提交的事务。

l实现闪回事务查询,需要先了解flashback_transaction_query视图,从该视图中可以获取事务的历史操作记录以及撤销语句(UNDO_SQL)。

l使用闪回事务查询,可以了解某个表的历史操作记录,这个操作记录对应一个撤销SQL语句,如果想要撤销这个操作,就可以执行这个SQL语句。

Flashback_transaction_query

名称 类型 说明

------------------------------------------------------------------------------------------------

XID RAW(8) 事务编号

START_SCN NUMBER 事务的开始的系统改变号

START_TIMESTAMP DATE 事务的开始时间

COMMIT_SCN NUMBER 事务提交时的系统改变号

COMMIT_TIMESTAMP DATE 事务提交时的时间

LOGON_USER VARCHAR2(30) 对应的用户

UNDO_CHANGE# NUMBER 撤销操作对应的编号

OPERATION VARCHAR2(32) 操作

TABLE_NAME VARCHAR2(256) 表

TABLE_OWNER VARCHAR2(32) 所有者

ROW_ID VARCHAR2(19) 行号

UNDO_SQL VARCHAR2(4000) 撤销事务的SQL语句

注意,要查询flashback_transaction_query视图的信息,需要有select any transaction的权限。

SQL> --如何撤销第二个事务 ----闪回事务查询

SQL> --授权select any transaction给scott

SQL> conn / as sysdba

已连接。

SQL> grant select any transaction toscott;

授权成功。

SQL> conn scott/tiger

已连接。

SQL> /*

SQL> 闪回事务查询的步骤:1

SQL> 1. 通过闪回版本查询获取事务号(xid)

SQL> 2. 通过xid查询Flashback_transaction_query,获取undo_sql

SQL> */

SQL> select tid,tname,versions_operation