oracle 10G 收縮表空間

   如果經常在表上執行DML操作,會造成數據庫塊中數據分佈稀疏,浪費大量空間。同時也會影響全表掃描的性能,因爲全表掃描需要訪問更多的數據塊。從oracle10g開始,表可以通過shrink來重組數據使數據分佈更緊密,同時降低HWM釋放空閒數據塊。

從10g開始,oracle開始提供Shrink的命令,假如我們的表空間中支持自動段空間管理 (ASSM),就可以使用這個特性縮小段,即降低HWM。這裏需要強調一點,10g的這個新特性,僅對ASSM表空間有效,否則會報 ORA-10635: Invalid segment or tablespace type。

比如我工作中使用的系統有個LOG表,記錄的日誌經常會刪除。時間長了查詢速度變慢,而且浪費表空間。下面就以這個表爲例,記錄下收縮表空間的方法。

1. 查看收縮前表的使用情況

select sum(bytes)/1024/1024 Mb from user_segments where segment_name='LOG';

2. 開啓行遷移

alter table LOG enable row movement;

3. 整理表空間內的碎片

 alter  table LOG shrink space compact;

4. 收縮表空間

alter table LOG shrink space;

5.再查看收縮後的表空間使用情況

select sum(bytes)/1024/1024 Mb from user_segments where segment_name='LOG';

注意:收縮表空間要在數據庫比較空閒的時候做。

 

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