〖环境 ( Environment ) 〗
SYSTEM: Windows XP sp3
DB : Oracle10.2G
〖现象 (Symptom) 〗
运行了一段脚本之后,突然发现Tables里面多了一些table name 类似 BIN$DEh5mRKIRGKvC6E+bQCawQ==$0 的表,觉得很诧异,对比了脚本之后发现这不是脚本里面创建的表,然后试着删除这些表:
SQL> drop table BIN$DEh5mRKIRGKvC6E+bQCawQ==$0;
drop table BIN$DEh5mRKIRGKvC6E+bQCawQ==$0
结果运行出错:
ERROR 位于第 1 行 :
ORA-38301: can not perform. DDL/DML over objects in Recycle Bin
〖原理( Cause ) 〗
在 Oracle10g 中,引入了一个回收站 (Recycle Bin) 的概念。回收站,从原理上来说就是一个数据字典表,放置用户 Drop 掉的数据库对象信息。被用户 Drop 的对象并没有被 Oracle 删除,仍然会占用空间。除非是用户手工进行 Purge 或者因为存储空间不够而被 Oracle 清掉。有了回收站,能够减少很多不必要的麻烦。常常看到开发人员误删除表,我们可以充分利用 10g 的闪回 (FLASHBACK) 功能来避免类似的人为操作。不能对已经放到回收站( Recycle Bin )中的对象执行 DDL/DML 语句。
〖方法( Action ) 〗
如果真的想彻底删除这个表,可以使用下面的命令清空回收站。
SQL 〉 PURGE RECYCLEBIN;