今天在导数据时,卡在一个表那里,等的不耐烦,就终止了,估计是表空间的大小可能不够,准备删掉表空间重建,在删表空间的过程 中,提示ora 38301的错误,删除失败,删其他表空间就没有问题。
到网上查了了一下,有这样的说法:导入表时执行有误,导致表名是很长一段代码如:BIN$/+V0R6/AQW79MAGuCgE+TQ==$0 无法删除
purge table "tablename" 表名要加双引号才行。
这个应该是我不能删除表空间的原因了,我用toad登陆数据库,查看到有constraints里有类似BIN$/+V0R6/AQW79MAGuCgE+TQ==$0的东西。
解决过程:
在sqlplus下运行purge table test.
"BIN$/+V0R6/AQW79MAGuCgE+TQ==$0"
提示表已经删除。
再运行drop tablespace test including contents,
问题解决。
ps
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;