ITPub博客

首页 > 数据库 > Oracle > [闪回特性之闪回版本查询]Flashback Version Query

[闪回特性之闪回版本查询]Flashback Version Query

原创 Oracle 作者:Hoegh 时间:2015-04-15 21:59:51 0 删除 编辑
        使用闪回版本查询来获取在给定的时间区间中,指定的行的不同版本。当COMMIT语句被执行时,一个新的行版本被创建。闪回版本查询使用VERSIONS BETWEEN子句:VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end},其中,start和end是代表开始和结束的表达式,代表被查询的时间区间。

        闪回版本查询返回一个表,包含行在指定的时间区间中的所有版本。在表中的每行都包含关于行版本的元数据伪列。需要注意的是,返回结果是左包含右不包含,即VERSIONS_START* <= t < VERSIONS_END*。

语法如下:

SELECT .....FROM tablename VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end} 

--start,end可以是时间也可以是scn

  • Flashback Version Query伪列说明
  • versions_start{scn|time}  版本开始的scn或时间戳
  • versions_end{scn|time}  版本结束scn或时间戳,如果有值表明此行后面被更改过是旧版本,如果为null,则说明行版本是当前版本或行被删除(即versions_operation值为D)。
  • versions_xid 创建行版本的事务ID
  • versions_operation  在行上执行的操作(I=插入,D=删除,U=更新)

   
   下面演示一下闪回版本查询如何使用。

点击(此处)折叠或打开

  1. SQL>
  2. SQL> create table scott.hoegh as select * from scott.dept where 1=2;

  3. Table created.

  4. SQL>
  5. SQL> select systimestamp from dual;

  6. SYSTIMESTAMP
  7. ---------------------------------------------------------------------------
  8. 15-APR-15 09.37.46.593306 PM +08:00

  9. SQL> select current_scn from v$database;

  10. CURRENT_SCN
  11. -----------
  12.     1172460

  13. SQL>
  14. SQL> insert into scott.hoegh select * from scott.dept where deptno=10;

  15. 1 row created.

  16. SQL> commit;

  17. Commit complete.

  18. SQL> c/10/20
  19. SP2-0023: String not found.
  20. SQL> insert into scott.hoegh select * from scott.dept where deptno=20;

  21. 1 row created.

  22. SQL> c/20/30
  23.   1* insert into scott.hoegh select * from scott.dept where deptno=30
  24. SQL> /

  25. 1 row created.

  26. SQL> commit;

  27. Commit complete.

  28. SQL> update scott.hoegh set dname='HOEGH' where deptno=10;

  29. 1 row updated.

  30. SQL> commit;

  31. Commit complete.

  32. SQL> insert into scott.hoegh select * from scott.dept where deptno=40;

  33. 1 row created.

  34. SQL> commit;

  35. Commit complete.

  36. SQL> select systimestamp from dual;

  37. SYSTIMESTAMP
  38. ---------------------------------------------------------------------------
  39. 15-APR-15 09.41.12.200887 PM +08:00

  40. SQL> select current_scn from v$database;

  41. CURRENT_SCN
  42. -----------
  43.     1172586

  44. SQL> SQL> set linesize 300
  45. SQL> /

  46.   STARTSCN STARTTIME ENDSCN ENDTIME VERSIONS_XID V DEPTNO
  47. ---------- ------------------------- ---------- ------------------------- ---------------- - ----------
  48.    1172566 15-APR-15 09.41.00 PM                               04000A0087020000 I 40
  49.    1172557 15-APR-15 09.40.36 PM                               05001D0025030000 U 10
  50.    1172521 15-APR-15 09.39.18 PM                               02000B0033030000 I 30
  51.    1172521 15-APR-15 09.39.18 PM                               02000B0033030000 I 20
  52.    1172493 15-APR-15 09.38.27 PM 1172557 15-APR-15 09.40.36 PM 0500040026030000 I 10

  53. SQL> SQL>
  54. SQL> select versions_startscn startscn,versions_starttime starttime,versions_endscn endscn,versions_endtime endtime,versions_xid,versions_operation,deptno
  55.  from scott.hoegh
  56.  versions between scn 1172460 and 1172586; 2 3

  57.   STARTSCN STARTTIME ENDSCN ENDTIME VERSIONS_XID V DEPTNO
  58. ---------- ------------------------- ---------- ------------------------- ---------------- - ----------
  59.    1172566 15-APR-15 09.41.00 PM                               04000A0087020000 I 40
  60.    1172557 15-APR-15 09.40.36 PM                               05001D0025030000 U 10
  61.    1172521 15-APR-15 09.39.18 PM                               02000B0033030000 I 30
  62.    1172521 15-APR-15 09.39.18 PM                               02000B0033030000 I 20
  63.    1172493 15-APR-15 09.38.27 PM 1172557 15-APR-15 09.40.36 PM 0500040026030000 I 10

  64. SQL>


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30162081/viewspace-1578998/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-03-13

  • 博文量
    132
  • 访问量
    2219934