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.