`

ora 38301无法对回收站的对象执行ddl

阅读更多

今天在导数据时,卡在一个表那里,等的不耐烦,就终止了,估计是表空间的大小可能不够,准备删掉表空间重建,在删表空间的过程 中,提示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;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics