大資料表的truncate,列刪除,shrink回收高水位
一、truncate 大資料表的操作
1、 truncate相關表,truncate先刪除資料字典中的該表所佔用的空間記錄
2、 將表所佔用的資料區塊全部釋放
3、 最後將表的HWM下降到最低。
如果你的表是一個巨大的表(幾十GB),那麼釋放資料區塊需要很久很久,影響你的系統使用。
解決方案:
1、先刪除資料字典中該表所佔用空間的記錄,將表的HWM下降到最低。
truncate table doudou reuse storage;
2、下面的命令就是在系統空間時間釋放資料區塊
alter table doudou deallocate unused keep 1G;
alter table doudou deallocate unused keep 0m;
最終將表doudou所有佔用的空間全部釋放。當然,如果我們在執行keep 0mb 之前,其他使用者已經向表doudou裡插入了資料,則不會真的把表doudou所有資料區塊釋放,而只是釋放沒有用的資料區塊而已。
二、大資料量表列的修改與刪除
1、基本刪除列
Alter table doudou drop column wow ; (刪除wow列,該列的資料及索引也被刪除)
Alter table doudou drop column wow cascadeconstraints;(刪除wow列,該列的資料,索引,及外鍵引用的列都被刪除)
Alter table doudou drop column wow cascadeconstraints checkpoint 2000; (checkpoint 2000產生完全檢查點這樣可以節省undo資源)
2、大資料量刪除列
刪除列的過程中,oracle會鎖定表,其他使用者不能對錶經行DML操作。如果表資料行非常多,則刪除了所花的時間會很長。尤其在業務高峰時期影響會更嚴重。為此,我們可以先將列標記為不可用,這是邏輯意義上的,只是更新資料字典裡的資訊,因此速度非常快。等到了業務繁忙的時候,我們再從物理上真正刪除列佔用的空間
alter table doudou set unused column wow;(wow列在物理上仍然存在,但是相對於使用者來說,該列就像真的被刪除了一樣。)
alter table doudou drop unused columns wow;真正的物理刪除了。(不忙的時候經行)
alter table doudou drop unused columns wow checkpoint2000; 節省了undo資源的使用。
三、Shrink回收高水位
使用shrink的條件:
1、 表所在的資料表空間必須使用ASSM。
2、 收縮表引起資料行在不同資料區塊之間的轉移,因此在被收縮的表上必須啟動row movement,選項。Alter talbe doudou enable row movement; 收縮後,結束行移動;alter table doudou disable row movement;
使用shrink的過程:
alter table doudou shrink space compact; 壓縮階段 (oracle建議在高峰時間壓縮)
alter table doudou shrink space; 收縮階段(oracle建議在不忙的時候收縮,收縮會產生獨佔鎖定,因此其他使用者不能對收縮的表經行任何操作)
alter table doudou shrink space cascade; 不僅收縮doudou表的,還收縮doudou相關表
http://blog.csdn.net/dbadoudou/article/details/7703197