设为首页 加入收藏

TOP

Oracle学习(15)【DBA向】:闪回(三)
2015-11-21 01:59:03 来源: 作者: 【 】 浏览:4
Tags:Oracle 学习 DBA 闪回
所有已经提交了的行记录。其语法格式如下:

select column_name[,column_name,...]

from table_name

versionsbetween [SCN|TIMESTAMP] [expr|MINVALUE]

and [epxr|MAXVALUE] as of [SCN|TIMESTAMP] expr;


?其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;AS OF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。

闪回版本查询举例


--闪回版本查询

SQL> create table versions_table
2 (vid number,vname varchar2(20));


表已创建。


SQL> --第一天
SQL> insert into versions_table values(1,'Tom');


已创建 1 行。


SQL> commit;


提交完成。


SQL> --第二天
SQL> insert into versions_table values(2,'Mary');


已创建 1 行。


SQL> commit;


提交完成。


SQL> --第三天
SQL> insert into versions_table values(3,'Mike');


已创建 1 行。


SQL> commit
2 ;


提交完成。


SQL> --第四天
SQL> update versions_table set vname='Mary123' where vid=2;


已更新 1 行。


SQL> commit;


提交完成。


SQL> select * from versions_table;


VID VNAME
---------- --------------------
1 Tom
2 Mary123
3 Mike


SQL> --执行闪回版本查询
SQL> select vid,vname
2 from versions_table
3 versions between timestamp minvalue and maxvalue;


VID VNAME
---------- --------------------
2 Mary123
3 Mike
2 Mary
1 Tom



SQL> select vid,vname,versions_operation,versions_starttime,versions_endtime
2 from versions_table
3 versions between timestamp minvalue and maxvalue
4 order by 1,4;

VID VNAME V VERSIONS_STARTTIME VERSIONS_ENDTIME
--- --------- - ---------------------------------------- ---------------------------------------------------------------------------
1 Tom I 29-3月 -12 11.07.26 上午
2 Mary I 29-3月 -12 11.07.41 上午 29-3月 -12 11.08.26 上午
2 Mary123 U 29-3月 -12 11.08.26 上午
3 Mike I 29-3月 -12 11.07.53 上午



闪回事务查询

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语句



注意

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


闪回事务查询举例

步骤:

l从闪回版本查询中,获取xid号。
l基于xid号,在flashback_transaction_query视图中获取相应事务的信息。
l利用UNDO_SQL撤销事务操作。

代码:

SQL> --闪回事务查询
SQL> create table transaction_table
2 (tid number,tname varchar2(20));


表已创建。


SQL> --第一个事务
SQL> insert into transaction_table values(1,'Tom');


已创建 1 行。


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


已创建 1 行。


SQL> commit;


提交完成。


SQL> --第二个事务
SQL> insert into transaction_table values(3,'Mike');


已创建 1 行。


SQL> update transaction_table set tname='Mary123' where tid=2;


已更新 1 行。


SQL> commit;


提交完成。


SQL> --如何撤销第二个事务??
SQL> desc flashback_transaction_query
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
XID RAW(8)
START_SCN NUMBER
START_TIMESTAMP DATE
COMMIT_SCN NUMBER
COMMIT_TIMESTAMP DATE
LOGON_USER VARCHA
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle获得日期中的年份 下一篇ORACLE11G在同一台linux服务器从..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: