Oracle 10g的闪回机制【20081016】

  • 格式:doc
  • 大小:113.50 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章Oracle 10g的闪回机制

5.1 简介

在Oracle中,对于提交的变化,是没有办法回退的。所以这时候就可能存在这样一种情况,对于表做了DML操作,并且在提交后才发现,对表的操作是错误的,此时我们没有办法把提交的错误数据回滚到初始的正确状态;同时,和可能存在一种情况,错误的对表执行了drop操作,由于DDL语句在执行后隐含的含有提交操作,所以这种情况也没有办法把执行了的错误DROP操作回滚的DROP语句执行前的状态。

对于第一种情况,在Oracle 9i版本若发现及时,可以通过dbms_flashback闪回,获取到执行错误操作前的数据,然后来执行修复。但是,由于回滚段中的数据可能被覆盖掉,所以通过这种闪回就有个限制。

对于第二种情况,在Oracle 10g以前的各个版本,只能执行数据库的不完整修复才能消除引入的错误操作(DROP TABLE).

下面介绍ORACLE 10G引入的闪回,10G引入的闪回更加灵活,提供的功能也更加强大。

10G引入的删除可分为4种:Flashback Database、Flashback Drop、Flashback Query、Flashback Versions Query、Flashback Transaction Query。

5.2 Flashback drop

在10G以前的版本中,如果误操作DROP了某张表,那么只能采取数据库的不完整修复来做恢复数据库,但10g版本新增的这个特性,提供了一种对误DROP表的修复方式。

●先做一个简单实验的例子:

先创建表create table t( a varchar2(30));

模拟错误操作DROP表drop table t;

此时闪回表flashback table t to before drop;

闪回表T后,表T从误操作后恢复了,并且可以对表T做常规操作。

●Flashback drop table的原理:

在较早的Oracle版本中,drop表时也会从数据字典中彻底删除对这个表的所有引用,恢复被drop 掉的表的唯一方法是执行时间点恢复。

而在10g的Oracle数据库中,drop table命令的实现已经发生变化:指定的表不再被删除,而是被重命名。

下面用个例子来说明:

新建一个用户,授予必要的权限,本章的例子都在用户fox完成。

create user fox identified by sys default tablespace users;

create user fox identified by sys default tablespace users;

grant create session,create table,flashback any table,debug connect session,create

type,create view,create sequence to fox;

alter user fox quota unlimited on users;

以fox用户建测试表并插入一条记录,

Create table test(a varchar2(4000));

Insert into test(a) values(‘测试flashback drop table’);

Commit;

此时模拟误操作,drop表test:

Drop table test;

由于此用户目前只是创建了一个对象TEST,但是已经被drop掉。但是我们查询

SQL> Select count(*) from user_objects;

COUNT(*)

----------

1

还存在一个对象,查询出这个对象

SQL> select object_name from user_objects;

OBJECT_NAME

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

BIN$6PH8zhiWR7yzokLGBvg49A==$0

现在来确定下。“BIN$6PH8zhiWR7yzokLGBvg49A==$0”是个什么对象。

SQL> select * from "BIN$H+Wwg3weRqSSlBI3UJOKbg==$0";

查询结果是

A

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

测试flashback drop table

此实验证实了我们开始drop的表test,实际上并没有被物理删除,只是被系统自动重新命名了。

恢复表

flashback table test to before drop;

●Oracle的“回收站”

参数RECYCLEBIN(值为ON或者OFF)用来控制是否开启数据库的flashback drop 特性。当此参数值设为OFF时,drop table时不会把表放进“回收站”,而是直接drop掉。当此参数值设为ON时,drop table是会把表放进“回收站”,并可以通过flashback drop特性来修复。

下面在以表test为例来说明:

SQL> drop table test;

SQL> select a.object_name, a.original_name

2 from recyclebin a, user_objects b

3 where a.object_name = b.object_name;

OBJECT_NAME ORIGINAL_NAME

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

BIN$/WDtTeRnQ3io2IQh/yZNJA==$0 TEST

SQL> select a from "BIN$/WDtTeRnQ3io2IQh/yZNJA==$0";

A

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

测试flashback drop table

通过查询“回收站”视图,可以知道表TEST在被DROP后,被系统自动重命名为“BIN$/WDtTeRnQ3io2IQh/yZNJA==$0”。

●管理“回收站”

相关主题