ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Flashback query样例(记录)

Flashback query样例(记录)

原创 Linux操作系统 作者:andyxu 时间:2009-06-27 09:37:07 0 删除 编辑

从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博客 ” ,链接:https://blog.itpub.net/110321/viewspace-607695/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    167
  • 访问量
    324448