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

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

作者头像
小麦苗DBA宝典
发布2020-06-04 10:36:58
4860
发布2020-06-04 10:36:58
举报

题目部分

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

答案部分

闪回查询(Flashback Query)是查询过去某个时间点或某个SCN值对应的表中的数据信息。它是基于回滚(Undo)表空间中的回滚信息实现。

闪回查询分为基于AS OF TIMESTAMP和基于AS OF SCN的闪回查询,如下所示:

SELECT * FROM SCOTT.EMP AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '6' MINUTE) WHERE ENAME = 'LHR';
SELECT ENAME, SAL FROM SCOTT.EMP AS OF TIMESTAMP(SYSDATE - 6 / 1440) WHERE ENAME = 'LHR';
SELECT * FROM SCOTT.EMP AS OF TIMESTAMP TO_TIMESTAMP('2017-11-14 11:41:22','YYYY-MM-DD HH24:MI:SS') WHERE  WHERE ENAME = 'LHR';
INSERT INTO  SCOTT.EMP  select * from t AS OF SCN 67830969;

闪回查询示例:

SQL> set timing on;
SQL> set serveroutput on;
SQL> set sqlblanklines on;
SQL> set linesize 800
SQL> set time on;

11:40:54 SQL> select * from old_t;

        ID NAME
---------- --------------------
         1 li

已用时间:  00: 00: 00.02
11:41:05 SQL> update old_t set name='lih' where id=1;

已更新 1 行。

已用时间:  00: 00: 00.01
11:41:16 SQL> commit;

提交完成。

已用时间:  00: 00: 00.03
11:41:20 SQL> update old_t set name='lihu' where id=1;

已更新 1 行。

已用时间:  00: 00: 00.01
11:41:31 SQL> commit;

提交完成。

已用时间:  00: 00: 00.01
11:41:34 SQL> update old_t set name='lihua' where id=1;

已更新 1 行。

已用时间:  00: 00: 00.01
11:41:39 SQL> commit;

提交完成。

已用时间:  00: 00: 00.01
11:41:43 SQL> update old_t set name='lihuar' where id=1;

已更新 1 行。

已用时间:  00: 00: 00.02
11:42:24 SQL> commit;

提交完成。

已用时间:  00: 00: 00.01
11:42:26 SQL> select * from old_t;

        ID NAME
---------- --------------------
         1 lihuar

已用时间:  00: 00: 00.02

------查询5分钟之前的数据
11:45:53 SQL> select * from old_t as of timestamp sysdate-5/24/60 where id=1;

        ID NAME
---------- --------------------
         1 li

已用时间:  00: 00: 00.02
------查询第一个事务提交,第二个事务还没有提交时的数据
11:55:13 SQL> select * from old_t as of timestamp to_timestamp('2012-11-14 11:41:22','YYYY-MM-DD HH2
4:MI:SS') where id=1;

        ID NAME
---------- --------------------
         1 lih

已用时间:  00: 00: 00.02
------查询第二个事务提交,第三个事务还没有提交时的数据
12:23:33 SQL> select * from old_t as of timestamp to_timestamp('2012-11-14 11:41:38','YYYY-MM-DD HH2
4:MI:SS') where id=1;

        ID NAME
---------- --------------------
         1 lihu

已用时间:  00: 00: 00.01
12:24:01 SQL>

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

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

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

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

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

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