{channel.title!channel.name} - 楚淮公司周东林

ORACLE删除表空间报错

这里涉及到recycle bin的概念,她是和普通对象公用表空间存储空间的,或者说Recycle bin的对象要和普通对象抢夺存储空间。当存储空间不够时,oracle会按照先入先出的原则覆盖recycle bin的对象。


报错信息。
SQL> DROP TABLESPACE GZ INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE GZ INCLUDING CONTENTS AND DATAFILES
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-38301: can not perform DDL/DML over objects in Recycle Bin


这里涉及到recycle bin的概念,她是和普通对象公用表空间存储空间的,或者说Recycle bin的对象要和普通对象抢夺存储空间。当存储空间不够时,oracle会按照先入先出的原则覆盖recycle bin的对象。

可以用如下方法清除 recycle bin 的空间:

1. 清空recycle bin中的表空间:
purge tablespace tablespace_name;
2. 清空某个表空间内的某个用户的对象:
pruge tablespace tablespace_name user user_name
3. 清除当前用户的对象:
purge recyclebin
4. 清除所有用户的对象:
purge dba_recyclebin
5. sysdba权限
drop table table_name purge
永久删除
6. 删除对象的关联索引:
purge index index_name

本次解决使用 purge tablespace GZ 清空recycle bin中的表空间。

SQL> purge tablespace GZ ; 
Tablespace purged.

SQL> DROP TABLESPACE GZ INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE GZ INCLUDING CONTENTS AND DATAFILES
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-38301: can not perform DDL/DML over objects in Recycle Bin

我这里删除还是不行,因为我用的sys账户登陆删除的。必须要用 表空间的账户。

 

SQL> purge recyclebin;
Recyclebin purged.

然后再删除

SQL> DROP TABLESPACE GZ INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.

我这个现象是先删除用户然后再删除表空间出现的,所以可能会遇到表空间账号被删除的情况。我这里解决的思路是把GZ表空间关联到别的账号下。

登陆账号执行 purge recyclebin;

然后切换账号运行 DROP TABLESPACE GZ INCLUDING CONTENTS AND DATAFILES; 删除表空间。

 

 


浏览.发表于:2018-10-18 10:47:31