当前位置:  数据库>oracle

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

    来源: 互联网  发布时间:2017-03-30

    本文导语: --========================================================== -- Oracle 闪回特性(Flashback Version、Flashback Transaction) --==========================================================         Oracle闪回特性为数据的快速回复某一对象的特定数据提供了更多的便利。...

--==========================================================

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

--==========================================================

   

    Oracle闪回特性为数据的快速回复某一对象的特定数据提供了更多的便利。前面介绍了闪回的几种特性,包括flashback database,

    flashback drop ,flashback query ,flashback table 。接下来本文将介绍Flashback Version与Flashback Transaction。

   

一、Flashback Version Query(闪回版本查询)

    闪回版本查询指的是Oracle可以针对特定的对象来查询某一特定段内该对象的变化的所有情况,可以对此跟踪该对象的变更情况。也可以根

    据特定的需要来将该对象修正到特定的时刻。闪回版本查询同闪回查询,闪回表一样,同样是使用了UNDO段的数据,即数据变更的多次镜像

    ,当UNDO段的数据由于空间压力而被清除,则产生无法闪回的情况。

   

    1.闪回版本查询语法,使用VERSIONS BETWEEN 关键字

        SELECT

        FROM

        VERSIONS BETWEEN SCN AND    --基于SCN的版本查询

        [WHERE ]

        [GROUP BY ]

        [HAVING

        [ORDER BY ]

       

        SELECT

        FROM

        VERSIONS BETWEEN timestamp to_timestamp('start_timestamp') and to_timestamp('end_timestamp') --基于TIMESTAMP的版本查询

        [WHERE ]

        [GROUP BY ]

        [HAVING

        [ORDER BY ]

       

    2.创建演示环境

 

        --对表tb1作如下操作,插入empno为的记录后,更新其职务,然后再删除该记录,最后再次插入该记录

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

           

            flasher@ORCL> insert into tb1 values(1000,'Jack','Clerk',20);  --插入记录

 

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

 

            flasher@ORCL> update tb1 set job='Manager' where empno=1000;   --将职务更新为Manager

 

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

 

            flasher@ORCL> delete from tb1 where empno=1000;    --删除该记录

 

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

 

            flasher@ORCL> insert into tb1 values(1000,'Jack','President',20);  --重新插入该记录

 

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

   

    3.使用Version Query(闪回版本查询)

        --通过使用versions关键字来获得版本信息

            flasher@ORCL> select empno,ename,job,versions_xid xid,versions_startscn v_stcn,

              2  versions_endscn v_edcn,versions_operation v_ops

              3  from tb1 versions between scn minvalue and maxvalue where empno=1000; 

 

            EMPNO ENAME    JOB       XID                  V_STCN     V_EDCN V_OPS

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

             1000 Jack     President 0A000C007E010000    1124320            I    

             1000 Jack     Manager   09000C00EE010000    1124301            D    

             1000 Jack     Manager   0A0009007E010000    1124282    1124301 U    

             1000 Jack     Clerk     06000E00A9010000    1124245    1124282 I    

  

        上面的示例通过为表tb1中插入一条empno=1000记录,并更新其职务,接下来对该记录进行删除,最后再次添加empno=1000,且职务不

        同的记录,可以看出对empno=1000所作的不同的修改被全部记录下来。

   

        注意,一个事务中,如果多次对该记录进行了修改,则查询中仅仅显示最后一次提交的状态,我们可以通过使用versions between关键

        字来查询对该表中的某条特定记录修改的不同版本

       

        查看不同的版本使用了类似于rowid的伪列

            versions_xid          --记录指定版本的事务的唯一标识符

            versions_startscn     --记录的起始SCN号

            versions_endscn       --记录的终止SCN号

            versions_operation    --记录的操作类型(DML操作,I表示插入,U表示更新,D表示删除)

            versions_starttime    --记录被修改的起始时间

            versions_endtime      --记录被修改的终止时间

   

        --也可以修改查询的条件来获取更多不同的版本,如下查询则为查询该记录一个小时以内的不同版本

            flasher@ORCL> select empno,ename,job,versions_xid xid,versions_startscn v_stcn,

              2  versions_endscn v_edcn,versions_operation v_ops

              3  from tb1 versions between timestamp

              4  to_timestamp(systimestamp-1/24) and systimestamp where empno=1000;  

 


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c的九大最新技术特性介绍
  • 也谈Oracle 数据库的绑定变量特性及应用
  • Oracle9i 动态SGA,PGA特性探索
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • ORACLE中DBMS_RANDOM随机数生成包
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3