Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1239607
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-25 11:10:39

简单来讲,如果我们把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时的状态。

下面分别举例:

2.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;

闪回完成。

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

阅读(1100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~