oracle空間收縮
都知道alter table move 或shrink space可以收縮段,用來消除部分行遷移,消除空間碎片,使資料更緊密,但move跟shrink space還是有區別的。
Move會移動高水位,但不會釋放申請的空間,是在高水位以下(below HWM)的操作。
而shrink space 同樣會移動高水位,但也會釋放申請的空間,是在高水位上下(below and above HWM)都有的操作。
Move解決問題:
a. 我們可以使用move將一個table從當前的tablespace上移動到另一個tablespace上:
alter table t move tablespace tablespace_name;
b. 我們還可以用move來改變table已有的block的儲存引數,如:
alter table t move storage (initial 30k next 50k);
c.另外,move操作也可以用來解決table中的行遷移的問題。
使用move的一些注意事項:
a. table上的index需要rebuild:
在前面我們討論過,move操作後,資料的rowid發生了改變,我們知道,index是透過rowid來fetch資料行的,所以,table上的index是必須要rebuild的。
alter index index_name rebuild online;
b.move時對table的鎖定
當我們對table進行move操作時,查詢v$locked_objects檢視可以發現,table上加了exclusive lock
c.關於move時空間使用的問題:
當我們使用alter table move來降低table的HWM時,有一點是需要注意的,這時,當前的tablespace中需要有1倍於table的空閒空間以供使用
Shrink space語法:
alter table
shrink space [ | compact | cascade ];
alter table
shrink space compcat;
收縮表,但會保持 high water mark;
alter table
shrink space;
收縮表,降低 high water mark;
alter table
shrink space cascade;
收縮表,降低 high water mark,並且相關索引也要收縮
用shrink有兩個前提條件:
1、表必須啟用row movement,如:
alter table nonsrt.TAB_EZG_BIZ_UNCONTRACTED enable row movement;
alter table nonsrt.TAB_EZG_BIZ_UNCONTRACTED shrink space;
2、表段所在表空間的段空間管理(segment space management)必須為auto
segment shrink分為兩個階段:
1、資料重組(compact):透過一系列insert、delete操作,將資料儘量排列在段的前面。在這個過程中需要在表上加RX鎖,即只在需要移
動的行上加鎖。由於涉及到rowid的改變,需要enable row
movement.同時要disable基於rowid的trigger.這一過程對業務影響比較小。
2、HWM調整:第二階段是調整HWM位置,釋放空閒資料塊。此過程需要在表上加X鎖,會造成表上的所有DML語句阻塞。在業務特別繁忙的系統上可能造成比較大的影響。
注意:shrink space語句兩個階段都執行。
shrink space compact只執行第一個階段。
如果系統業務比較繁忙,可以先執行shrink space compact重組資料,然後在業務不忙的時候再執行shrink space降低HWM釋放空閒資料塊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21754115/viewspace-1179987/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle表空間收縮方案Oracle
- 收縮表空間 for Oracle 10gOracle 10g
- 【RESIZE】Oracle收縮表空間主要命令Oracle
- oracle之臨時表空間的收縮Oracle
- Oracle效能優化:收縮臨時表空間Oracle優化
- mysql收縮共享表空間MySql
- shrink收縮檔案空間
- 分析表空間空閒率並收縮表空間
- Oracle 10g Shrink Table - Shrink Space 收縮空間Oracle 10g
- DB2_收縮表空間DB2
- Oracle案例11——Oracle表空間資料庫檔案收縮Oracle資料庫
- ORACLE 11g臨時表空間收縮的功能Oracle
- lvm收縮邏輯卷空間LVM
- Oracle 11g 新特性 -- 臨時表空間收縮(轉)(Oracle
- oracle壓縮表表空間Oracle
- 收縮臨時表空間收縮方法及ORA-03297錯誤處理
- mysql共享表空間擴容,收縮,遷移MySql
- 表空間(資料檔案shrink)收縮示例
- MySQL 5.7新特性之線上收縮undo表空間MySql
- 收縮表空間ORA-03297錯誤解決
- 儲存管理之段收縮、可恢復空間
- 轉貼:收縮oracle表空間時ora-03297錯誤的解決Oracle
- 收縮datafile for oracle -- 轉Oracle
- Oracle 19c 線上縮減 UNDO 表空間 容量Oracle
- 收縮Oracle資料檔案Oracle
- ORACLE 收縮資料檔案Oracle
- 收縮ORACLE的資料檔案Oracle
- Oracle一次縮小表空間的處理過程Oracle
- HybridDBforPostgreSQL列存表(AO表)的膨脹、垃圾檢查與空間收縮SQL
- 測試表的空間壓縮與表空間的關係
- Oracle表空間Oracle
- 關於收縮表和表空間的相關概念(Shrinking Database Segments Online)Database
- Oracle資料檔案收縮例項Oracle
- oracle 壓縮備份與普通備份從空間,時間,CPU效能的比較Oracle
- oracle temp 表空間Oracle
- 增加oracle表空間Oracle
- oracle undo 表空間Oracle
- oracle users 表空間Oracle