大資料表的truncate,列刪除,shrink回收高水位

lovehewenyu發表於2012-06-29

大資料表的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 cascade constraints;(刪除wow列,該列的資料,索引,及外來鍵引用的列都被刪除)

Alter table doudou drop column wow cascade constraints 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 checkpoint 2000; 節省了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相關表

 感謝韓思捷老師的《教你如何成為OCP》!

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

相關文章