您的位置:首页 > 产品设计 > UI/UE

关于flashback query 特性

2008-04-15 00:04 344 查看
flashback query 是oracle 9i 之后推出来的一个特性,借助它,我们有可能很方便的恢复误操作(dml 操作)之前的数据。
简单的说,flashback query 允许你查看过去某个时间点的数据,比如说,你可以查看5分钟,或一个小时之前的某个表的数据。这样的话,通过过去数据和现在实际数据的对比,我们就可以很容易的得到误操作所影响到的数据。
flashback 闪回是要用到 undo 的,因此,关于undo_retention 参数的设置和 flashback query 特性是有关系的。
undo_retention 基本上(10g 有特性保证绝对保证) 保证了受dml 影响的数据前影像在undo segment 中至少保留多长时间,那么这个时间保留的越长,允许你flashback query 至过去时刻的范围就越大。undo_retention 要适当设置。

不多说了,看例子。

总的来说,有两个2,第一个2 是说, flashback query 的特性可以使用scn 或者timestamp 来 指定要闪回的时间点;第二个2 是说,flashback query 有两种形式的用法,一种是 select 后面的 as of , 一种是 通过 dbms_flashback 包的 enable_at_time 或者 enable _at_system_change_number 来指定过去的时间点。

SQL> desc test
名称 是否为空? 类型
----------------------------------------- -------- -------------------------

ID NUMBER

SQL> set time on
23:07:24 SQL> select * from test;

ID
----------
1
2
3
4
5
6
7
8
9
10
11

已选择11行。

23:07:29 SQL> delete from test;

已删除11行。

23:07:53 SQL> commit;

提交完成。

23:08:00 SQL> select * from test;

未选定行

23:08:03 SQL> select * from test as of timestamp (sysdate - 1/1440); -- 查看一分钟之前的数据

ID
----------
1
2
3
4
5
6
7
8
9
10
11

已选择11行。

23:08:28 SQL> select dbms_flashback.get_system_change_number from dual; --获得当前的scn 号

GET_SYSTEM_CHANGE_NUMBER
------------------------
699693

23:08:52 SQL> select * from test as of scn 699690;

未选定行

23:09:05 SQL> select * from test as of scn 699666;

未选定行

23:09:14 SQL> select * from test as of scn 699600;

ID
----------
1
2
3
4
5
6
7
8
9
10
11

已选择11行。

23:09:23 SQL>

-- 可以从如下的语句中大致判断下 scn 是在什么时间范围
SQL> select sequence#,first_change#,next_change#,to_char(first_time,'YYYYMMDD HH24:MI:SS') FROM v$log_history;

SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# TO_CHAR(FIRST_TIME,'YYYYMMDDHH
---------- ------------- ------------ ------------------------------
1 534907 565899 20080411 23:19:27
2 565899 573451 20080411 23:23:10
3 573451 612334 20080411 23:28:57
4 612334 639840 20040101 00:07:31
5 639840 661519 20080413 10:00:18
6 661519 688384 20080413 21:44:24

6 rows selected

SQL>

-- 下面是 dbms_flashback 包的方式
23:16:52 SQL> connect dbmgr
输入口令:
已连接。
23:17:00 SQL> exec dbms_flashback.enable_at_time(sysdate-20/1440);

PL/SQL 过程已成功完成。

23:17:21 SQL> select * from sys.test;

ID
----------
1
2
3
4
5
6
7
8
9
10

已选择10行。

23:17:32 SQL> exec dbms_flashback.disable;

PL/SQL 过程已成功完成。

23:17:43 SQL> select * from sys.test;

未选定行

23:17:48 SQL>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: