
在Oracle中,什么是闪回查询(Flashback Query)?
闪回查询(Flashback Query)是查询过去某个时间点或某个SCN值对应的表中的数据信息。它是基于回滚(Undo)表空间中的回滚信息实现。
闪回查询分为基于AS OF TIMESTAMP和基于AS OF SCN的闪回查询,如下所示:
1SELECT * FROM SCOTT.EMP AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '6' MINUTE) WHERE ENAME = 'LHR';
2SELECT ENAME, SAL FROM SCOTT.EMP AS OF TIMESTAMP(SYSDATE - 6 / 1440) WHERE 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
5SQL> set 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




