数据库所在硬盘空间剩下的不多了,所以我删除了一些不需要的用户:
drop user B0901 cascade;
drop user B0902 cascade;
drop user B0903 cascade;但是删除用户后,空间一点变化都没有
这几个用户使用的TABLESPACE都是USERS现在我查系统中还有很多用户使用这个USERS表空间:
SQL> select username,default_tablespace from dba_users;USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
A0908                         USERS
A0901                          USERS
A0904                         USERS
A0907                         USERS
A0909                         USERS
A0905                         USERS
现在我的问题是,如何要释放已经删除用户所占用的磁盘空间,而不影响其他使用USERS表空间的用户?

解决方案 »

  1.   

    那你是不是大部分的objects并不是在usrs里面啊。
      

  2.   

    USERNAME                       DEFAULT_TABLESPACE
    ------------------------------ ------------------------------
    MGMT_VIEW                      SYSTEM
    SYS                            SYSTEM
    DBSNMP                         SYSAUX
    SYSMAN                         SYSAUX
    SYSTEM                         SYSTEM
    OUTLN                          SYSTEM
    EXFSYS                         SYSAUX
    DMSYS                          SYSAUX
    WMSYS                          SYSAUX
    ORDSYS                         SYSAUX
    XDB                            SYSAUX
    OLAPSYS                        SYSAUX
    SI_INFORMTN_SCHEMA             SYSAUX
    ORDPLUGINS                     SYSAUX
    MDSYS                          SYSAUX
    CTXSYS                         SYSAUX
    ANONYMOUS                      SYSAUX不是users的我刚刚都没有帖出来
      

  3.   

    影响空间大小的是数据,而数据是存放到TABLESPACE中的,你只删除用户不删除表空间的对应的OBJECT,空间当然没变化啦。
    你是想删除用户对应的表是吧,那你当初就不应该让这么多用户共用一个TABLESPACE。
    使用:
    select * from dba_objects t where t.owner = 'username'
    查询出你要删除用户对应的OBJECT,然后DROP掉就OK了。
      

  4.   


    这样的理解是不对的,user即为schema。而对象是以schema为基础,进行存储的,这里drop掉用户,所以是会删除掉这个用户的对象的,所以你给的sql是会返回什么样的数据叻。 如果是你描述的这样的,oracle的实现也太考虑的不仔细了。那么下面回到我们的问题上来,为什么空间不会减少了,这里主要还是老的话题,tablespace的shrink的问题。 这里删除掉user和user里的对象,并不会shrink表的数据文件,要shrink数据文件,需要用其他的一些方法。可见
    http://www.inthirties.com/thread-6-1-1.htmlhttp://blog.csdn.net/inthirties/archive/2009/09/09/4531986.aspx
      

  5.   

    楼主要释放的好像是磁盘空间吧,如果是,drop是没用的(从这也看出您对Oracle的体现结构不熟)
    如果不是,而只是释放用户数据在数据文件占用的空间,就按照zhangchu_63那样。
      

  6.   


    参考一下http://www.inthirties.com/thread-6-1-1.html http://blog.csdn.net/inthirties/archive/2009/09/09/4531986.aspx 
      

  7.   

    呵呵 我也来凑个热闹 
    如果zhangchu_63兄弟对USER和SCHEMA还不太清楚的话 可以看下下面这个文章http://blog.csdn.net/wh62592855/archive/2009/09/27/4599333.aspx
      

  8.   

    模糊记得有个cascade ,删除用户的同时释放其对象
      

  9.   

    呵呵 你没发现楼主的语句里已经包含了CASCADE了吗
      

  10.   

    6# inthirties给的那个链接你去看了吗
      

  11.   

    举例:
    alter tablespace tablespace_name coalesce;
    alter database datafile 'data_file_name' resize 100M;
      

  12.   

    谢谢各位了,我把问题解决了,主要方式还是处理了30多G的undotbs01.dbf文件(方法如下),表空间的处理我以后也会注意到的。对于undotbs01.dbf文件太大的处理办法:
    1.升级到9205 
    2.禁止undo tablespace自动增长 -- 创建一个新的小空间的UNDO TABLESPACE
    CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/opt/oracle/oradata/undotbs02.dbf' SIZE 100M REUSE AUTOEXTEND ON;
    -- 设置新的表空间为系统UNDO_TABLESPACE
    ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;
    -- DROP 旧的表空间
    alter system set undo_retention=0;
    然后才能DROP:(需要等待一会)
    DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
    SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
      

  13.   

    多谢inthirties和wh62592855的不吝赐教。
    其实ORACLE我才刚刚起步。