ORACLE10g回收站的好处是在误删除一个表时,有一个恢复的机制,但如果不需要使用这个功能,可以使用命令进行关闭,下面主要描述一下针对回收站的相关操作。

回收站,从原理上来说就是一个数据字典表,放置用户Drop掉的数据库对象信息。用户进行Drop操作的对象并没有被数据库删除,仍然会占用空间。除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。数据库有了这样的功能,能够减少很多不必要的麻烦。常常看到开发人员误把表删除,急急忙忙找DBA 来想办法的情况。我们可以充分利用10g的闪回(FLASHBACK,闪回,回闪?)功能来避免大量的人工误操作。

1.关闭或开启回收站功能

        ALTER SESSION SET recyclebin=on;

 

        ALTER SYSTEM SET recyclebin=OFF;

2.查看回收站里的对象

SELECT original_name, object_name, TYPE, droptime FROM user_recyclebin;

 

BIN$t26oQCQuTri6ZrLN1WPSvA==$0

 

 

3.删除回收站里的对象

PURGE RECYCLEBIN;

 

PURGE table "BIN$t26oQCQuTri6ZrLN1WPSvA==$0"

 

转换后的名字格式如下:

 

BIN$unique_id$version 其中BIN代表RecycleBin

unique_id是数据库中该对象的唯一标志,26个字符长度

version表示该对象的版本号

注:在10g beta 版本中,名字格式如下:

RB$$objn$object_type$version

其中的RB,代表Recycle Bin. objn为表的目录对象号. object_type表示对象类型. version表示版本号. 由数据库指定。

 

3.从回收站恢复表

恢复表,用回闪表的功能:

 

FLASHBACK TABLE zftang TO BEFORE DROP;

 

 

默认的恢复是第一个被删除的表。如果要恢复指定的表,可以在FLASHBACK TABLE 后面加上指定的RECYCLEBIN 参数指定其他的名字:

 

FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP;
FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
*
ERROR at line 1:
ORA-38312: original name is used by an existing object
 
FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP  RENAME TO foo2;
 
Flashback complete.