在Oracle中查询表的大小来管理维护表空间
下面是表占用空间大小的SQL:
select t.owner,t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) "占用空间(M)"
from dba_segments t
where t.segment_type='TABLE' and owner not like '%SYS%'
group by OWNER, t.segment_name, t.segment_type order by sum(t.bytes / 1024 / 1024) desc;
在查询结果中会看到 segment_name 字段中有一部分表的名字以BIN开头,这部分表是drop表时产生的备份数据,存于回收站用以误删表时恢复数据。
以下是有关于回收表相关的SQL:
PURGE RECYCLEBIN; --删除回收站中所有的表
PURGE TABLE tablename; --删除回收站中指定的表
select * from recyclebin where type='TABLE'; --查询回收站中的表
FLASHBACK TABLE tablename; --恢复被删除的表
若想删除表时不产生回收站中的垃圾信息以此来节省表空间可以用以下SQL(在drop语句后加 purge 来清除)来drop表:
drop table tablename purge;