我的一个表空间太满了,怎样查找是被哪个(些)表占着(表太多,不可能一个一个看)

解决方案 »

  1.   


    SELECT *
      FROM user_tables t
     WHERE t.tablespace_name = '&name'
       AND t.blocks IS NOT NULL
     ORDER BY t.blocks DESC
      

  2.   

    SELECT *
         dba_tables t
       WHERE t.tablespace_name = 'ACCOUNT_DATA'
       AND t.blocks IS NOT NULL t.blocks IS NOT NULL只有两个表,然后我检索这两个表,里面没有数据,
    为什么没有数据 占着这多的表空间,查开表空间的字段是“blocks”把
      

  3.   

    最好还是用这个SQL来看表空间中各个对象所占用的大小:select SEGMENT_NAME,SEGMENT_TYPE,sum(bytes)/1024/1024 MB
    from dba_segments
    where tablespace_name='XXXX'
    and segment_name not like 'BIN%'
    group by SEGMENT_NAME,SEGMENT_TYPE;
      

  4.   

    not like 'BIN%'为什么要加这句?
      

  5.   

    那是回收站,在这能查出它的大小,但这部份数据实际是可被重写的,所以要排除。如果你看到一个表数据很少,但占很大空间,那是因为表里面的数据使用delete删除的,没用truncate,所以表的高水位没有改变。所以你看到还是那么大。对于这种表,你可以用以下方式回收空间:
    alter table xxx enable row movement;
    alter table xxx shrink space;
      

  6.   

    忘了说,上面收缩表的命令是10g才有的,如果你是老版本,就用alter table xxx move;来收缩,同时需要把表上的索引重建.