表收缩(shrink space)

检查空间使用情况时发现,最近一些自动扩展的表空间又增加了不少的空间,就查看了下库里有哪些大表;

SELECT (T.BYTES / 1024 / 1024) AS MB
  FROM DBA_SEGMENTS T
 WHERE T.OWNER IN ('ORADS', 'ORABW')
 ORDER BY MB DESC;

或者用DBA_EXTENTS也可以查出分配了多大的空间

发现有两张表达到了四个多G的空间,并且都是一些普通的堆表,查看这两张表发现只有几十万的数据,并且每张表的列也不多,于是就在USER_TABLES里找其中一张表看一下真正占用的空间是多少大:


- - - - 先分析表

ANALYZE TABLE L2_GYLJRSS_CUSTOMER COMPUTE STATISTICS; 

- - - - 查看实际占用情况
SELECT (NUM_ROWS * (AVG_ROW_LEN)) / 1024 / 1024 AS MB
  FROM USER_TABLES
 WHERE TABLE_NAME = 'L2_GYLJRSS_CUSTOMER';

查出的结果就60M 多一点,于是就做一下表收缩(表必须启用row movement  & 表段所在表空间的段空间管理(segment space management)必须为auto)

ALTER TABLE L2_GYLJRSS_CUSTOMER ENABLE ROW MOVEMENT;

ALTER TABLE L2_GYLJRSS_CUSTOMER SHRINK SPACE;

这时再用第一条语句查看(表DBA_SEGMENTS 或DBA_EXTENTS)得到的结果就和在USER_TABLES中的结果差不多了;

再查看表空间的使用情况,那四个G的空间已经退换过去了;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章