截斷表後空間不釋放的原因分析

regonly1發表於2014-02-17
這個問題以前也遇到過,沒具體分析。今天再次遇到,用比較合適的方法解決了這個問題。所以記錄一下。
現象:
表T在被截斷後,表空間仍為原來的大小。
下面查詢:
select segment_name, round(bytes/1024/1024,4) || 'M' from user_segments where segment_name = 'T';
查詢到表T的大小為304m。
將T表截斷後再次查詢,發現仍為304M.

檢視錶的儲存引數後發現,原來是初始段(initial_extent)引起的:

執行下面查詢:
select table_name, pct_free, pct_used, initial_extent from user_tables where table_name = 'T';

查到initial_extent的大小為304m;

要解決這個問題,可以對錶進行move:
alter table t move storage(initial 16k);
執行如上命令後,再次檢視錶的大小變為16k。

另外,看了下truncate命令中的drop/reuse storage子句,發現這兩個附加選項不能解決如上問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-1082520/,如需轉載,請註明出處,否則將追究法律責任。

相關文章