[閃回特性之閃回版本查詢]Flashback Version Query

Hoegh發表於2015-04-15
        使用閃回版本查詢來獲取在給定的時間區間中,指定的行的不同版本。當COMMIT語句被執行時,一個新的行版本被建立。閃回版本查詢使用VERSIONS BETWEEN子句:VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end},其中,startend是代表開始和結束的表示式,代表被查詢的時間區間。

        閃回版本查詢返回一個表,包含行在指定的時間區間中的所有版本。在表中的每行都包含關於行版本的後設資料偽列。需要注意的是,返回結果是左包含右不包含,即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部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1578998/,如需轉載,請註明出處,否則將追究法律責任。

相關文章