表收縮(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的空間已經退換過去了;



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