ITPub博客

首页 > 数据库 > Oracle > oracle flashback特性(2.1)--Flashback Table之RECYCLEBIN

oracle flashback特性(2.1)--Flashback Table之RECYCLEBIN

原创 Oracle 作者:jackjw 时间:2008-08-23 10:33:27 0 删除 编辑

[@more@]

简单来讲,如果我们把flashback query看做是恢复记录,则flashback table就是用来恢复表的(由于记录是以表为载体存储,因此flashback table也应该看做是恢复记录,只不过相对于flashback query而言,其粒度更大一些),同时呢,在Oracle10g中又新引入了一个叫做Recycle Bin的功能(主要针对表及其关联的对象,比如索引约束啥的),被删除的表并非真正删除,而是先通过修改数据字典的方式,将其改名并放入recyclebin,如果要恢复recycle bin中对象的话,借助flashback table是最简便的方式。除此之外,flashback table也提供了类似flashback query中as of scn/timestamp的方式,借助undo数据,直接将现有的表恢复到某个指定的时间点或scn时的状态。


下面分别举例:

1、从RECYCLEBIN中恢复

要恢复recyclebin中的表,注意语句如下:Flashback table [objName] to before drop,这个obj_name即可以是表名,也可以是recyclebin中的对象表(支持同时操作多个表,表名之间以逗号分隔即可),由于该项功能是恢复被删除表,因此官方对其还有另外一称谓:flashback drop。

下面举个例子,从recyclebin中恢复一个被删除的表:

JSSWEB> select object_name,original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME

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

BIN$u/7I62WxS12jMVO358SFgw==$0 JSS_TB3

JSSWEB> select object_name,original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME

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

BIN$u/7I62WxS12jMVO358SFgw==$0 JSS_TB3

JSSWEB> flashback table jss_tb3 to before drop;

闪回完成。

JSSWEB> select object_name,original_name from recyclebin;

未选定行

Flashback table语句同时提示了一个rename to [newTBname]的子句,如果要恢复的表在当前schema中已经存在同名的表,建议你在恢复时通过rename to 子句为待恢复的表指定一个新的表名,不然数据库会报ORA-38312错误,再举个例子:

JSSWEB> drop table jss_tb3;

表已删除。

JSSWEB> create table jss_tb3 as select *from jss_tb1;

表已创建。

JSSWEB> flashback table jss_tb3 to before drop;

flashback table jss_tb3 to before drop

*

第 1 行出现错误:

ORA-38312: 原始名称已被现有对象使用

你看,正如其提示的那样,该表被删除之后,又执行过创建同名表的操作,因此恢复的时候就会报错,怎么办呢,用rename to.....

JSSWEB> flashback table jss_tb3 to before drop rename to jss_tb3_bak;

闪回完成。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3907/viewspace-1009372/ ,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2008-09-19

  • 博文量
    39
  • 访问量
    99386