你好,游客 登录 注册 搜索
背景:
阅读新闻

Oracle 闪回特性(Flashback Version、Flashback Transaction)

[日期:2011-03-07] 来源:Linux社区  作者:robinson_0612 [字体: ]

二、Flashback Transaction Query(闪回事务查询)

    闪回事务查询是对闪回版本查询的扩展。从某种程度上来说,闪回版本查询通常用于更细粒度的查询,如针对特定的记录。而闪回事务则是

    针对某一事务进行闪回,是基于事务级别的。闪回事务查询通过查询视图flashback_transaction_query来获得某个或多个特定事务信息,

    同时可以根据该视图中提供的undo_sql 列中的语句来反转事务,从而保证数据的完整性。

    查询该视图需要具有select any transaction权限,默认情况下sys用户和DBA角色具有该权限

       

        下面演示基于事务的闪回示例

       

            flasher@ORCL> create table tb2 tablespace users as select empno,ename,sal,deptno from scott.emp;  --创建表tb2

           

            flasher@ORCL> insert into tb2 select 9999,'Robinson',3000,50 from dual;  --插入新记记录

           

            flasher@ORCL> commit                                                   --提交事务一

 

            flasher@ORCL> select * from tb2 where empno=9999;

             

            EMPNO ENAME          SAL DEPTNO

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

             9999 Robinson   3000.00     50

         

            flasher@ORCL> update tb2 set sal=sal+500 where empno=9999;             --更新记录

                     

            flasher@ORCL> commit;                                                  --提交事务二

             

            flasher@ORCL> update tb2 set deptno=20 where empno=9999;               --再次更新记录

             

            flasher@ORCL> commit;                                                  --提交事务三

             

            flasher@ORCL> select empno,ename,sal,deptno,versions_xid,versions_operation

              2  from tb2 versions between scn minvalue and maxvalue        --使用Version Query查询从中看到了三个事务

              3  where empno=9999;

 

                 EMPNO ENAME             SAL     DEPTNO VERSIONS_XID     V

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

                  9999 Robinson         3500         20 08000400C9010000 U

                  9999 Robinson         3500         50 09001600BE010000 U

                  9999 Robinson         3000         50 04002C00CA010000 I     -- I为最早的事务

 

            flasher@ORCL> select operation,undo_sql from flashback_transaction_query

              2  where xid=hextoraw('09001600BE010000');        --根据事务号获得一个反转该事务的DML语句

             

            OPERATION  UNDO_SQL

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

            UPDATE     update "FLASHER"."TB2" set "SAL" = '3000' where ROWID = 'AAANUPAAGAAAAAkAAN';

 

            flasher@ORCL> select operation,undo_sql from flashback_transaction_query

              2  where xid=hextoraw('08000400C9010000');        --根据事务号获得一个反转该事务的DML语句

             

            OPERATION  UNDO_SQL

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

            UPDATE     update "FLASHER"."TB2" set "DEPTNO" = '50' where ROWID = 'AAANUPAAGAAAAAkAAN';          

       

        从上面的两个查询中可以得到反转事务的DML语句,直接执行相应的反转语句,即可将事务变更到特定的状态,有点类似于回滚,但不

        是执行了回滚操作。

 

三、总结

    1.Flashback Version 多用于查看某条特定记录所有已提交的版本,包括每个版本的创建时间以及结束时间。

    2.Flashback Transaction Query 多用于查看某个事务内的特定对象,可以通过视图flashback_transaction_query构造倒退事务的DML语句。

    3.闪回中不能对DDL语句进行闪回,即闪回仅仅支持DML语句。

 

Oracle教程 更多参考

有关闪回特性请参考

Oracle 闪回特性(FLASHBACK DATABASE)

Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)

Oracle 闪回特性(Flashback Query、Flashback Table)

Oracle 闪回特性(Flashback Version、Flashback Transaction)

有关基于用户管理的备份和备份恢复的概念请参考:

Oracle 冷备份

Oracle 热备份

Oracle 备份恢复概念

Oracle 实例恢复

Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)

有关RMAN的恢复与管理请参考:

RMAN 概述及其体系结构

RMAN 配置、监控与管理

RMAN 备份详解

RMAN 还原与恢复

有关Oracle体系结构请参考:

Oracle 实例和Oracle数据库(Oracle体系结构)

Oracle 表空间与数据文件

Oracle 密码文件

Oracle 参数文件

Oracle 数据库实例启动关闭过程

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 归档日志

linux
相关资讯       Oracle教程 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款