从Oracle9i开始,Oracle提供了Flashback query的特性。其利用Oracle提供的多版本读一致性的特性,通过UNDO来提供所需的前镜像的数据。
利用Flashback Query特性,可以实现:
1:恢复丢失的数据或者还原错误更新的数据,即使是已经提交的。
2:比较现有数据同过去数据差异。
…..
为Flashback Query设置数据库
1:使用AUM(Automatic undo management)来维护读一致性
设置UNDO_RETENTION初始化参数,该参数设置决定可以闪回查询好久之前的数据。
设置UNDO_MANAGEMENT初始化参数为AUTO。
创建拥有足够大空间的UNDO表空间。
AUM是Oracle9i的默认设置。
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1
2:授予用户必要的权限
用户必须有相关表FLASHBACK的权限或者FLASHBACK ANY TABLE的系统权限。
若使用DBMS_FLASHBACK包,必须有该包EXECUTE的权限,且不能用SYS用户执行该包。
使用Flashback Query的样例
1: SELECT * FROM tableName AS OF
TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE) WHERE ….;
2: SELECT * FROM tableName AS OF
TIMESTAMP TO_TIMESTAMP(‘20070920083059’,‘yyyymmddhh24miss’) WHERE …..;
3: SELECT * FROM tableName AS OF SCN 4122650073 WHERE …..;
4: 使用DBMS_FLASHBACK包
dbms_flashback.enable_at_time(to_timestamp('20-FEB-2002','DD-MON-YY'));
SELECT salary FROM employees WHERE employee_id = 205;
SELECT COUNT(*) FROM employees;
dbms_flashback.disable;
一些说明:
1:Flashback Query仅适用于DML操作,对DDL无效
2:9i中采用基于时间点的Flashback Query会有误差,10g中已改进
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/110321/viewspace-607695/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/110321/viewspace-607695/