暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

DB宝 2023-06-15
523


题目部分

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


     





答案部分


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

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

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


闪回查询示例:

 1SQL> set timing on;
2SQL> set serveroutput on;
3SQL> set sqlblanklines on;
4SQL> set linesize 800
5SQLset time on;
6
711:40:54 SQL> select * from old_t;
8
9        ID NAME
10---------- --------------------
11         1 li
12
13已用时间:  00: 00: 00.02
1411:41:05 SQL> update old_t set name='lih' where id=1;
15
16已更新 1 行。
17
18已用时间:  00: 00: 00.01
1911:41:16 SQL> commit;
20
21提交完成。
22
23已用时间:  00: 00: 00.03
2411:41:20 SQL> update old_t set name='lihu' where id=1;
25
26已更新 1 行。
27
28已用时间:  00: 00: 00.01
2911:41:31 SQL> commit;
30
31提交完成。
32
33已用时间:  00: 00: 00.01
3411:41:34 SQL> update old_t set name='lihua' where id=1;
35
36已更新 1 行。
37
38已用时间:  00: 00: 00.01
3911:41:39 SQL> commit;
40
41提交完成。
42
43已用时间:  00: 00: 00.01
4411:41:43 SQL> update old_t set name='lihuar' where id=1;
45
46已更新 1 行。
47
48已用时间:  00: 00: 00.02
4911:42:24 SQL> commit;
50
51提交完成。
52
53已用时间:  00: 00: 00.01
5411:42:26 SQL> select * from old_t;
55
56        ID NAME
57---------- --------------------
58         1 lihuar
59
60已用时间:  00: 00: 00.02
61
62------查询5分钟之前的数据
6311:45:53 SQL> select * from old_t as of timestamp sysdate-5/24/60 where id=1;
64
65        ID NAME
66---------- --------------------
67         1 li
68
69已用时间:  00: 00: 00.02
70------查询第一个事务提交,第二个事务还没有提交时的数据
7111:55:13 SQL> select * from old_t as of timestamp to_timestamp('2012-11-14 11:41:22','YYYY-MM-DD HH2
724:MI:SS'
where id=1;
73
74        ID NAME
75---------- --------------------
76         1 lih
77
78已用时间:  00: 00: 00.02
79------查询第二个事务提交,第三个事务还没有提交时的数据
8012:23:33 SQL> select * from old_t as of timestamp to_timestamp('2012-11-14 11:41:38','YYYY-MM-DD HH2
814:MI:SS'
where id=1;
82
83        ID NAME
84---------- --------------------
85         1 lihu
86
87已用时间:  00: 00: 00.01
8812:24:01 SQL>





文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论