天天看點

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.再檢視收縮後的表空間使用情況