檢查空間使用情況時發現,最近一些自動擴展的表空間又增加了不少的空間,就查看了下庫裏有哪些大表;
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的空間已經退換過去了;