SELECT * FROM user_tables t WHERE t.tablespace_name = '&name' AND t.blocks IS NOT NULL ORDER BY t.blocks DESC
SELECT * dba_tables t WHERE t.tablespace_name = 'ACCOUNT_DATA' AND t.blocks IS NOT NULL t.blocks IS NOT NULL只有两个表,然后我检索这两个表,里面没有数据, 为什么没有数据 占着这多的表空间,查开表空间的字段是“blocks”把
最好还是用这个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;
not like 'BIN%'为什么要加这句?
那是回收站,在这能查出它的大小,但这部份数据实际是可被重写的,所以要排除。如果你看到一个表数据很少,但占很大空间,那是因为表里面的数据使用delete删除的,没用truncate,所以表的高水位没有改变。所以你看到还是那么大。对于这种表,你可以用以下方式回收空间: alter table xxx enable row movement; alter table xxx shrink space;
SELECT *
FROM user_tables t
WHERE t.tablespace_name = '&name'
AND t.blocks IS NOT NULL
ORDER BY t.blocks DESC
dba_tables t
WHERE t.tablespace_name = 'ACCOUNT_DATA'
AND t.blocks IS NOT NULL t.blocks IS NOT NULL只有两个表,然后我检索这两个表,里面没有数据,
为什么没有数据 占着这多的表空间,查开表空间的字段是“blocks”把
from dba_segments
where tablespace_name='XXXX'
and segment_name not like 'BIN%'
group by SEGMENT_NAME,SEGMENT_TYPE;
alter table xxx enable row movement;
alter table xxx shrink space;