使用闪回版本查询来获取在给定的时间区间中,指定的行的不同版本。当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=更新)
下面演示一下闪回版本查询如何使用。
-
SQL>
-
SQL> create table scott.hoegh as select * from scott.dept where 1=2;
-
-
Table created.
-
-
SQL>
-
SQL> select systimestamp from dual;
-
-
SYSTIMESTAMP
-
---------------------------------------------------------------------------
-
15-APR-15 09.37.46.593306 PM +08:00
-
-
SQL> select current_scn from v$database;
-
-
CURRENT_SCN
-
-----------
-
1172460
-
-
SQL>
-
SQL> insert into scott.hoegh select * from scott.dept where deptno=10;
-
-
1 row created.
-
-
SQL> commit;
-
-
Commit complete.
-
-
SQL> c/10/20
-
SP2-0023: String not found.
-
SQL> insert into scott.hoegh select * from scott.dept where deptno=20;
-
-
1 row created.
-
-
SQL> c/20/30
-
1* insert into scott.hoegh select * from scott.dept where deptno=30
-
SQL> /
-
-
1 row created.
-
-
SQL> commit;
-
-
Commit complete.
-
-
SQL> update scott.hoegh set dname='HOEGH' where deptno=10;
-
-
1 row updated.
-
-
SQL> commit;
-
-
Commit complete.
-
-
SQL> insert into scott.hoegh select * from scott.dept where deptno=40;
-
-
1 row created.
-
-
SQL> commit;
-
-
Commit complete.
-
-
SQL> select systimestamp from dual;
-
-
SYSTIMESTAMP
-
---------------------------------------------------------------------------
-
15-APR-15 09.41.12.200887 PM +08:00
-
-
SQL> select current_scn from v$database;
-
-
CURRENT_SCN
-
-----------
-
1172586
-
-
SQL> SQL> set linesize 300
-
SQL> /
-
-
STARTSCN STARTTIME ENDSCN ENDTIME VERSIONS_XID V DEPTNO
-
---------- ------------------------- ---------- ------------------------- ---------------- - ----------
-
1172566 15-APR-15 09.41.00 PM 04000A0087020000 I 40
-
1172557 15-APR-15 09.40.36 PM 05001D0025030000 U 10
-
1172521 15-APR-15 09.39.18 PM 02000B0033030000 I 30
-
1172521 15-APR-15 09.39.18 PM 02000B0033030000 I 20
-
1172493 15-APR-15 09.38.27 PM 1172557 15-APR-15 09.40.36 PM 0500040026030000 I 10
-
-
SQL> SQL>
-
SQL> select versions_startscn startscn,versions_starttime starttime,versions_endscn endscn,versions_endtime endtime,versions_xid,versions_operation,deptno
-
from scott.hoegh
-
versions between scn 1172460 and 1172586; 2 3
-
-
STARTSCN STARTTIME ENDSCN ENDTIME VERSIONS_XID V DEPTNO
-
---------- ------------------------- ---------- ------------------------- ---------------- - ----------
-
1172566 15-APR-15 09.41.00 PM 04000A0087020000 I 40
-
1172557 15-APR-15 09.40.36 PM 05001D0025030000 U 10
-
1172521 15-APR-15 09.39.18 PM 02000B0033030000 I 30
-
1172521 15-APR-15 09.39.18 PM 02000B0033030000 I 20
-
1172493 15-APR-15 09.38.27 PM 1172557 15-APR-15 09.40.36 PM 0500040026030000 I 10
-
-
SQL>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30162081/viewspace-1578998/
,如需转载,请注明出处,否则将追究法律责任。