在oracle 10g中,引入了一个回收站(recycle bin)的概念.
回收站,从原理上来说就是一个数据字典表,放置用户drop掉的数据库对象信息.用户进行drop操作的对象并没有被数据库删除,仍然会占用空间.除非是由于用户手工进行purge或者因为存储空间不够而被数据库清掉.数据库有了这样的功能,能够减少很多不必要的麻烦.常常看到开发人员误把表删除,急急忙忙找dba来想办法的情况,相信,随着10g的大范围应用,这种情形应该比较少见了.
dba管理上的相关信息可以从user_recyclebin(dba_recyclebin)中获取.从现在的beta版本来看,手册上所说的通过sql*plus的show recycle bin 命令查看还不可用.
为了便于测试,我们创建了一个表空间foo,大小为1m,创建了一个用户foo,默认的表空间为foo.
------------------------------------
sql> connect foo/foo
已连接。
sql> select table_name from user_tables;
未选定行
sql> desc user_recyclebin
名称 是否为空? 类型
--------------------------------------
......
......
user_recyclebin大多是自解释的,涵义比较容易理解.
sql> select object_name from user_recyclebin;
未选定行
sql> create table foo as select * from dual;
表已创建。
sql> select table_name from user_tables;
table_name
------------------------------
foo
sql> drop table foo;
表已丢弃。
sql> select table_name from user_tables;
table_name
------------------------------
rb$$41888$table$0
sql>
sql> select object_name, original_name from user_recyclebin;
object_name original_name
-------------------- --------------------
rb$$41888$table$0 foo
sql> desc rb$$41888$table$0
名称 是否为空? 类型
----------------------------------------
dummy varchar2(1)
当一个表被删除并移动到"回收站"中,它的名字要进行一些转换.这样的目的显而易见是为了避免同类对象名称的重复.(windows上,经过了特殊的处理,回收站里的操作系统文件可以重名.)
转换后的名字格式如下:
rb$$objn$object_type$version
其中的rb,代表recycle bin. objn为表的目录对象号. object_type表示对象类型. version表示版本号.
由数据库指定。foo表被删除后,在数据库回收站里变成了rb$$41888$table$0 。从名字可以看出,这个对象的类型是table,version是0.
sql> create table foo as select * from dual;
表已创建。
sql> select table_name from user_tables;
table_name
------------------------------
foo
rb$$41888$table$0
sql> drop table foo;
表已丢弃。
sql> select object_name, original_name from user_recyclebin;
object_name original_name
-------------------- -------------
rb$$41889$table$0 foo
rb$$41888$table$0 foo
sql>
能看出来,虽然源表名字相同,在回收站里的对象名字是不同的。
已经放到回收站里的表是不能用drop 命令删除的:
sql> drop table rb$$41888$table$0;
drop table rb$$41888$table$0
*
error 位于第 1 行:
ora-38301: can not perform ddl/dml over objects in recycle bin
如果要清掉改对象,使用purge命令:
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器