在Oracle中,什么是闪回版本查询(Flashback Version Query)?
闪回版本查询(Flashback Version Query)是查询过去某个时间段或某个SCN段内表中数据的变化情况。闪回版本查询基于回滚(Undo)表空间中的回滚信息实现。
查询语句一般为:
1SELECT TO_CHAR(VERSIONS_STARTTIME,'YYYY-MM-DD HH24:MI:SS') VERSIONS_STARTTIME,VERSIONS_STARTSCN,TO_CHAR(VERSIONS_ENDTIME,'YYYY-MM-DD HH24:MI:SS') VERSIONS_ENDTIME ,VERSIONS_ENDSCN,VERSIONS_XID,VERSIONS_OPERATION,EMPNO
2 FROM T_FVQ_20170617_LHR VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
3 ORDER BY VERSIONS_STARTTIME;复制
其中,VERSIONS BETWEEN用于指定闪回版本查询时查询的时间段或SCN段;AS OF用于指定闪回查询时查询的时间点或SCN。在闪回版本查询的目标列中,可以使用下列几个伪列返回版本信息:
l VERSIONS_STARTTIME:基于时间的版本有效范围的下界;
l VERSIONS_STARTSCN:基于SCN的版本有效范围的下界;
l VERSIONS_ENDTIME:基于时间的版本有效范围的上界;
l VERSIONS_ENDSCN:基于SCN的版本有效范围的上界;
l VERSIONS_XID:操作的事务ID,唯一的标识行;
l VERSIONS_OPERATION:执行操作的类型,I 表示INSERT,D 表示DELETE,U 表示UPDATE。
闪回版本查询注意事项:
① VERSIONS子句不能用于查询的表包括外部表、临时表和固定表。
② 不能使用VERSIONS子句查询视图。但是,在视图定义中可使用VERSIONS子句。
③ SELECT语句中的VERSIONS子句不能跨多个DDL语句(这些语句会更改相应表的结构)。
闪回版本查询示例:
1LHR@orclasm > SHOW PARAMETER UNDO
2
3NAME TYPE VALUE
4------------------------------------ ----------- ------------------------------
5_undo_autotune boolean FALSE
6undo_management string AUTO
7undo_retention integer 900
8undo_tablespace string UNDOTBS1
9
10LHR@orclasm > CREATE TABLE T_FVQ_20170617_LHR AS SELECT * FROM SCOTT.EMP WHERE 1=2;--创建表T_FVQ_20170617_LHR
11
12Table created.
13
14LHR@orclasm > SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL;--查询时间作为TIMESTAMP开始时间
15
16TO_DATE(SYSDATE,'YY TIMESTAMP_TO_SCN(SYSDATE)
17------------------- -------------------------
182017-06-17 14:49:58 67842991
19
20LHR@orclasm > INSERT INTO T_FVQ_20170617_LHR SELECT * FROM SCOTT.EMP WHERE EMPNO=7902;--插入EMPNO=7902
21
221 row created.
23
24LHR@orclasm > COMMIT; --插入一行提交作为一个版本
25
26Commit complete.
27
28LHR@orclasm > INSERT INTO T_FVQ_20170617_LHR SELECT * FROM SCOTT.EMP WHERE EMPNO=7788;
29
301 row created.
31
32LHR@orclasm > INSERT INTO T_FVQ_20170617_LHR SELECT * FROM SCOTT.EMP WHERE EMPNO=7698;
33
341 row created.
35
36LHR@orclasm > COMMIT; --插入两行提交作为一个版本
37
38Commit complete.
39
40LHR@orclasm > UPDATE T_FVQ_20170617_LHR SET SAL=8888 WHERE EMPNO=7788;
41
421 row updated.
43
44LHR@orclasm > COMMIT; --再次更改EMPNO=7788的行提交,使这行有旧版本
45
46Commit complete.
47
48LHR@orclasm > SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL;--查询时间作为TIMESTAMP结束时间
49
50TO_DATE(SYSDATE,'YY TIMESTAMP_TO_SCN(SYSDATE)
51------------------- -------------------------
522017-06-17 14:51:46 67843218
53
54LHR@orclasm > SELECT TO_CHAR(VERSIONS_STARTTIME,'YYYY-MM-DD HH24:MI:SS') VERSIONS_STARTTIME,VERSIONS_STARTSCN,TO_CHAR(VERSIONS_ENDTIME,'YYYY-MM-DD HH24:MI:SS') VERSIONS_ENDTIME ,VERSIONS_ENDSCN,VERSIONS_XID,VERSIONS_OPERATION,EMPNO
55 2 FROM T_FVQ_20170617_LHR VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
56 3 ORDER BY VERSIONS_STARTTIME;
57
58VERSIONS_STARTTIME VERSIONS_STARTSCN VERSIONS_ENDTIME VERSIONS_ENDSCN VERSIONS_XID V EMPNO
59------------------- ----------------- ------------------- --------------- ---------------- - ----------
602017-06-17 14:50:04 67843038 050007009F9F0000 I 7902
612017-06-17 14:50:57 67843139 07000D0018830000 I 7698
622017-06-17 14:50:57 67843139 2017-06-17 14:51:34 67843209 07000D0018830000 I 7788
632017-06-17 14:51:34 67843209 07001F0019830000 U 7788复制
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
==================================================================================================================
【干货来了|小麦苗IT资料分享】
★小麦苗DB职场干货:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w
★小麦苗数据库健康检查:https://share.weiyun.com/5lb2U2M
★小麦苗微店:https://weidian.com/?userid=793741433
★各种操作系统下的数据库安装文件(Linux、Windows、AIX等):https://pan.baidu.com/s/1hqff3Evv6oj2-Tn87MpFkQ
★小麦苗分享的资料:https://share.weiyun.com/57HUxNi
★小麦苗课堂资料:https://share.weiyun.com/5fAdN5m
★小麦苗课堂试听资料:https://share.weiyun.com/5HnQEuL
★小麦苗出版的相关书籍:https://share.weiyun.com/5sQBQpY
★小麦苗博客文章:https://share.weiyun.com/5ufi4Dx
★数据库系列(Oracle、MySQL、NoSQL):https://share.weiyun.com/5n1u8gv
★公开课录像文件:https://share.weiyun.com/5yd7ukG
★其它常用软件分享:https://share.weiyun.com/53BlaHX
★其它IT资料(OS、网络、存储等):https://share.weiyun.com/5Mn6ESi
★Python资料:https://share.weiyun.com/5iuQ2Fn
★已安装配置好的虚拟机:https://share.weiyun.com/5E8pxvT
★小麦苗腾讯课堂:https://lhr.ke.qq.com/
★小麦苗博客:http://blog.itpub.net/26736162/
★OCP培训:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA
★12c的OCP培训:https://mp.weixin.qq.com/s/hMLHlyjMHhLmA0xN4hLvfw
★OCM培训:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA
★高可用(RAC+DG+OGG)培训:https://mp.weixin.qq.com/s/4vf042CnOdAD8zDyjUueiw
★小麦苗课堂腾讯视频:http://v.qq.com/vplus/71f69a319a24c6808cd6e6189ae90664
==================================================================================================================
复制
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599、618766405
● 微信:lhrbestxh
● 微信公众号:DB宝
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。
