操作系统版本:
[oracle@oracle trace]$ uname -a
Linux oracle.example.com 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
[oracle@oracle trace]$ lsb_release -a
LSB Version::base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description:Red Hat Enterprise Linux Server release 6.5 (Santiago)
Release: 6.5
Codename: Santiago
数据库版本:
SYS@proc> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
环境构造:
SYS@proc> create table t(id int);

Table created.

SYS@proc> insert into t values(1);

1 row created.

SYS@proc> insert into t select * from t;

1 row created.

SYS@proc> /

2 rows created.

...省略相同步骤...

SYS@proc>/

1048576 rows created.

SYS@proc> commit;

Commit complete.

SYS@proc> select BYTES/1024/1024 mb from dba_segments where owner='SYS' and segment_name='T';

MB
----------
25
SYS@proc> create tablespace abc datafile '/u01/app/oracle/oradata/proc/abc01.dbf' size 26m;

Tablespace created.

SYS@proc> create user km identified by oracle account unlock;

User created.

SYS@proc> grant connect,create table to km;

Grant succeeded.

SYS@proc> alter user km quota 26m on abc;

User altered.

SYS@proc> select AUTOEXTENSIBLE from dba_data_files where tablespace_name='ABC';

AUT
---
NO
SYS@proc> create table km.t tablespace abc as select * from t;
create table km.t tablespace abc as select * from t
*
ERROR at line 1:
ORA-01652: unable to extend temp segment by 128 in tablespace ABC


SYS@proc> col file_name for a50
SYS@proc> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------
/u01/app/oracle/oradata/proc/test01.dbf
/u01/app/oracle/oradata/proc/example01.dbf
/u01/app/oracle/oradata/proc/users01.dbf
/u01/app/oracle/oradata/proc/abc01.dbf
/u01/app/oracle/oradata/proc/sysaux01.dbf
/u01/app/oracle/oradata/proc/system01.dbf
/u01/app/oracle/oradata/proc/undotbs2_1.dbf
/u01/app/oracle/oradata/proc/undotbs2_2.dbf

8 rows selected.

SYS@proc> alter database datafile '/u01/app/oracle/oradata/proc/abc01.dbf' resize 30m;

Database altered.

SYS@proc> create table km.t tablespace abc as select * from t;

Table created.

SYS@proc> conn km/oracle
Connected.

KM@proc> drop table t;

Table dropped.

KM@proc> show recycle;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$Q38bmJwFDYXgU28cqMDtew==$0 TABLE 2016-12-13:07:03:11
KM@proc> conn / as sysdba
Connected.
SYS@proc> delete from recyclebin$; --不正规操作,正确应该在km用户下执行purge table t或者purge table "BIN$Q38bmJwFDYXgU28cqMDtew==$0"

1 row deleted.

SYS@proc> commit;

Commit complete.

SYS@proc> conn km/oracle
Connected.
KM@proc> show recycle;
KM@proc> conn / as sysdba
Connected.
SYS@proc> create table km.t tablespace abc as select * from t;

create table km.t tablespace abc as select * from t
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'ABC'

SYS@proc> alter user km quota unlimited on abc;

User altered.

SYS@proc> create table km.t tablespace abc as select * from t;
create table km.t tablespace abc as select * from t
*
ERROR at line 1:
ORA-01652: unable to extend temp segment by 128 in tablespace ABC --这里可以看出虽然在km用户执行show recycle已经是空的,但是真正的空间并没被释放。


SYS@proc> drop tablespace abc including contents and datafiles;
drop tablespace abc 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@proc> drop user km cascade;
drop user km cascade
*
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
正规清理回收站的表:
1、使用 PURGE TABLE original_table_name; 这里的 original_table_name 表示未 drop 以前的名称
2、使用 PURGE TABLE recyclebin_object_name; 这里的 recyclebin_object_name 表示回收站中的对象名称
3、使用 PURGE TABLESPACE tablespace_name 从指定的表空间中清除所有的丢弃对象
4、使用 PURGE TABLESPACE tablespace_name USER user_name 从回收站中清除属于某个特定用户的所有丢弃对象。
5、DROP USER user_name cascade 直接删除指定用户及其所属的全部对象,也就是说,DROP USER 命令会绕过回收站进行直接删除。
6、使用 PURGE RECYCLEBIN 命令清除用户自己的回收站
7、PURGE DBA_RECYCLEBIN 从所有用户的回收站清除所有对象


假如发生了这个场景,应该怎么去解决?