前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试810】在Oracle中,什么是闪回版本查询(Flashback Version Query)?

【DB笔试面试810】在Oracle中,什么是闪回版本查询(Flashback Version Query)?

作者头像
小麦苗DBA宝典
发布2020-06-04 10:37:45
6530
发布2020-06-04 10:37:45
举报

题目部分

在Oracle中,什么是闪回版本查询(Flashback Version Query)?

答案部分

闪回版本查询(Flashback Version Query)是查询过去某个时间段或某个SCN段内表中数据的变化情况。闪回版本查询基于回滚(Undo)表空间中的回滚信息实现。

查询语句一般为:

代码语言:javascript
复制
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
  FROM T_FVQ_20170617_LHR VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE 
 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语句(这些语句会更改相应表的结构)。

闪回版本查询示例:

代码语言:javascript
复制
LHR@orclasm > SHOW PARAMETER UNDO

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_undo_autotune                       boolean     FALSE
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

LHR@orclasm > CREATE TABLE T_FVQ_20170617_LHR AS SELECT * FROM SCOTT.EMP WHERE 1=2;--创建表T_FVQ_20170617_LHR

Table created.

LHR@orclasm > SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL;--查询时间作为TIMESTAMP开始时间

TO_DATE(SYSDATE,'YY TIMESTAMP_TO_SCN(SYSDATE)
------------------- -------------------------
2017-06-17 14:49:58                  67842991

LHR@orclasm >  INSERT INTO T_FVQ_20170617_LHR SELECT * FROM SCOTT.EMP WHERE EMPNO=7902;--插入EMPNO=7902

1 row created.

LHR@orclasm > COMMIT;  --插入一行提交作为一个版本

Commit complete.

LHR@orclasm > INSERT INTO T_FVQ_20170617_LHR SELECT * FROM SCOTT.EMP WHERE EMPNO=7788;

1 row created.

LHR@orclasm > INSERT INTO T_FVQ_20170617_LHR SELECT * FROM SCOTT.EMP WHERE EMPNO=7698;

1 row created.

LHR@orclasm > COMMIT; --插入两行提交作为一个版本

Commit complete.

LHR@orclasm > UPDATE T_FVQ_20170617_LHR SET SAL=8888 WHERE EMPNO=7788;

1 row updated.

LHR@orclasm > COMMIT; --再次更改EMPNO=7788的行提交,使这行有旧版本

Commit complete.

LHR@orclasm > SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL;--查询时间作为TIMESTAMP结束时间

TO_DATE(SYSDATE,'YY TIMESTAMP_TO_SCN(SYSDATE)
------------------- -------------------------
2017-06-17 14:51:46                  67843218

LHR@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
  2    FROM T_FVQ_20170617_LHR VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE 
  3   ORDER BY VERSIONS_STARTTIME;

VERSIONS_STARTTIME  VERSIONS_STARTSCN VERSIONS_ENDTIME    VERSIONS_ENDSCN VERSIONS_XID     V      EMPNO
------------------- ----------------- ------------------- --------------- ---------------- - ----------
2017-06-17 14:50:04          67843038                                     050007009F9F0000 I       7902
2017-06-17 14:50:57          67843139                                     07000D0018830000 I       7698
2017-06-17 14:50:57          67843139 2017-06-17 14:51:34        67843209 07000D0018830000 I       7788
2017-06-17 14:51:34          67843209                                     07001F0019830000 U       7788

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档