oracle 闪回查询语句24小时,Oracle9i Flashback Query 闪回查询总结 --- (通过时间点恢复)...

Oracle9i 中新增的闪回查询(Flashback Query)功能对于误删除或者误更新并且已经commit 了的情况,提供了简便快捷的恢复方法,而在Oracle 提供闪回查询之前,碰到这种情况只 能通过备份来进行基于时间点的恢复,无疑这比闪回查询要麻烦而且费时。[@more@]

什么是Flashback Query

利用Oracle 多版本读一致的特性,在需要的时候通过undo 来提供所需的前镜像中的数据。 利用这个功能,可以看到历史数据(呵呵,就像时光倒流。月光宝盒?),甚至用历史数据 来修复误操作引起的错误。可以通过指定时间或者SCN 来检索需要的数据。

前提条件

数据库必须处于Automatic Undo Management 状态。

最大可以闪回查询的时间段由UNDO_RETENTION 初始化参数(单位为秒)指定

可以通过ALTER SYSTEM SET UNDO_RETENTION = ;来修改参数值

如何使用Flashback Query

通过SQL

使用SELECT 语句的AS OF 来进行闪回查询,语法如下:

SQL> show parameter undo_retention

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_retention integer 10800

SQL> show parameter undo_management

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string AUTO

使用AS OF 关键字来对表,视图,或者物化视图进行Flashback Query,如果指定了SCN,

那么expr 部分必须是一个数字,如果指定了TIMESTAMP,那么expr 必须是一个timestamp 类型的值。查询结果将返回在指定的SCN 或者时间点上的数据。

下面我们使用scott 方案来作一个实验。

[zhangleyi@linux9 bin]$ sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on Thu Oct 9 23:44:07 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect scott/tiger

Connected.

SQL> select sal from emp where empno=7369;

SAL

----------

800

SQL> update emp set sal=4000 where empno=7369;

1 row updated.

SQL> commit;

Commit complete.

SQL> select sal from emp where empno=7369;

SAL

----------

4000

Uses Oracle's multiversion read-consistency capabilities to

restore data by applying undo as needed. You can view and

repair historical data, and you can perform queries on the

database as of a certain wall clock time or user-specified

system commit number (SCN)

备注:TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY)指查询距当前时间一天以

前的时间点的数据,如果我们要查询一小时以前的,那么需要将DAY 替换成HOUR 即可,

查询10 分钟以前的将'1' DAY 替换'10' MINUTE。

以上演示了对于误更新的字段进行恢复的方法,但是如果想在update 的子查询部分使用AS

OF 那么该查询只能返回一条记录,否则将会报错。如下:

SQL> select empno,sal from emp;

EMPNO SAL

---------- ----------

7369 800

7499 1600

7521 1250

7566 2975

7654 1250

7698 2850

7782 2450

7788 3000

SQL> select sal from emp

2 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);

3 where empno=7369;

SAL

----------

800

SQL> update emp set sal=

2 (select sal from emp

3 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY)

4 where empno=7369)

5 where empno=7369;

1 row updated.

SQL> select sal from emp where empno=7369;

SAL

----------

800

SQL> commit;

7839 5000

7844 1500

7876 1100

EMPNO SAL

---------- ----------

7900 950

7902 3000

7934 1300

14 rows selected.

SQL> update emp set sal=4000;

14 rows updated.

SQL> commit;

Commit complete.

SQL> select empno,sal from emp;

EMPNO SAL

---------- ----------

7369 4000

7499 4000

7521 4000

7566 4000

7654 4000

7698 4000

7782 4000

7788 4000

7839 4000

7844 4000

7876 4000

EMPNO SAL

---------- ----------

7900 4000

7902 4000

7934 4000

14 rows selected.

=====================================================

Oracle9i的Flashback查询的用途非常多。终端用户或者开发者几乎每天都要恢复那些由于应用失误造成的丢失数据或者被修改的数据。

Oracle宣称你可以用Flashback查询创建具有内嵌的、面向终端用户的、自服务的纠错能力的应用程序,但是很少有Oracle使用者打算去实现自服务纠错或者是要求DBA进行flashback恢复。

你可以使用DBMS_FLASHBACK包去启用或禁用Flashback查询。你还能使用系统改变数(SCN)或者真实时间来指定flashback的时间点。

例如,假设你在上午11:15对数据库作了一个不正确的改变。只要你的Flashback查询处于启用状态,你就能使用下面的命令告诉Oracle应用上午11:00时所有的undo日志映像:

EXECUTE dbms_Flashback.Enable_At_Time('28-AUG-02 11:00:00');

现在所有的查询都将显示上午11:00时的数据,你还可以很容易地恢复丢失的或者被修改的数据。

虽然这是及时回退一个显著的有用特征,但是还是有一些限制的:服务器必须配置成使用自动undo管理。

在使用Flashback查询时不能使用DDL或者DML。

Flashback不取消DDL操作,例如DROP命令。

数据库管理员做一些必要的设置之后,一般用户才能使用Flashback查询功能,下面是所要做的设置:ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO

ALTER SYSTEM SET UNDO_RETENTION=86400

GRANT EXECUTE ON DBMS_FLASHBACK TO USERNAME;

UNDO_RETENTION的参数(单位为秒)指定Oracle保存用于flashback查询的undo映像的时间。一般你可以将这个值设为一整天(864000秒),这样你就能看到前一天全天的映像。当然,你的在线undo日志必须足够大,大到足以能保存一整天的undo日志数据,对于繁忙的Oracle系统,这个数值可以达到很多G字节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值