闪回版本查询
语法:
select column_name[,column_name,...]
from table_name
versions between[SCN|TIMESTAMP] [expr|MINVALUE] and[epxr|MAXVALUE];
1) 查询 scott用户 emp表字段 empno 为 7369 对应的sal 值为 800
SYS@ORA11GR2>conn scott/tiger
Connected.
SCOTT@ORA11GR2>
SCOTT@ORA11GR2>select ename,job,sal from emp where empno=7369;
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800
2) 对 sal 字段进行更新,更新三次,每次增加 200
--第一次:
SCOTT@ORA11GR2>update emp set sal=sal+200 where empno=7369;
1 row updated.
SCOTT@ORA11GR2>commit;
Commit complete.
--第二次:
SCOTT@ORA11GR2>update emp set sal=sal+200 where empno=7369;
1 row updated.
SCOTT@ORA11GR2>commit;
Commit complete.
--第三次:
SCOTT@ORA11GR2>update emp set sal=sal+200 where empno=7369;
1 row updated.
SCOTT@ORA11GR2>commit;
Commit complete.
3) 查询更新三次后的值
SCOTT@ORA11GR2>select ename,job,sal from emp where empno=7369;
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 1400
4) 闪回版本查询,我们可以清晰的看到更新的每个版本:
SCOTT@ORA11GR2>select to_char(versions_starttime,'yyyy-mm-dd hh24:mi:ss') as starttime,versions_xid,ename,job,sal from emp versions between timestamp sysdate-10/1440 and sysdate where empno=7369;
STARTTIME VERSIONS_XID ENAME JOB SAL
------------------- ---------------- ---------- --------- ----------
2016-09-29 19:25:14 11000300E1000000 SMITH CLERK 1400
2016-09-29 19:25:00 0C002000DC000000 SMITH CLERK 1200
2016-09-29 19:24:35 14000400E1000000 SMITH CLERK 1000
SMITH CLERK 800
5) 附:涉及到的伪列
伪列 | 含义 |
VERSIONS_STARTSCN | 该记录操作时的 scn 或时间,如果为空,表示该行记录是在查询范围外创建的。 |
VERSIONS_ENDSCN | 该记录失效时的 scn 或时间,如果为空,说明记录当前时间在当前表内存在,或者已经被删除了,可以配合着 VERSIONS_OPERATION 列来看,如果 VERSIONS_OPERATION 列值为 D,说明该列已被删除,如果该列为空,则说明记录在这段时间无操作。 |
VERSIONS_OPERATION | 对该行执行的操作: I 表示 insert, D 表示 delete, U 表示 update。 |
VERSIONS_XID | 该操作的事务 ID |
6) 闪回版本注意事项
ü VERSIONS 子句不能用于:
- 外部表
- 临时表
- 固定表
- 视图
ü VERSIONS 不能跨 DDL 命令。
ü 段收缩操作被过滤掉。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31397003/viewspace-2126601/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31397003/viewspace-2126601/