1、Online segment shrink 在oracle資料庫段中重新回收利用高水位線以下成片段的空閑空間。Segment shrink 的好處有:
1壓縮的資料會導致更好的緩衝利用率,從而產生更好的線上交易處理(OLTP)效能。
2收縮的資料在全表掃描時需要更少的塊被掃描,這反過來又導致決策支援系統(DSS)的更好的效能
2、Segment shrink是一個線上,就地操作。DML操作和查詢可以在段收縮的資料移動階段期間進行。當空間回收時,並發的DML操作收縮操作結束時的阻塞一段短時間。索引是在收縮操作期間維護的,可以保持在操作完成後可用。段收縮不需要分配額外的磁碟空間。
3、Segment shrink收回高水位線上下閑置的空間。相比之下,Deallocating UnusedSpace只收回高水位線上面未使用的空間。在shrink操作中,,預設情況下,資料庫壓縮段,調整高水位標記,釋放回收空間。
4、段收縮要求行被轉移到新的地點。因此,你必須首先使你想收縮的對象允許行運動,禁用任何基於rowid上定義觸發器對象。使用ALTERTABLE ...ENABLEROWMOVEMENT命令開啟行移動。
5、收縮操作只可以在有自動段空間管理(ASSM)功能的本地管理的資料表空間中的段上執行。在一個ASSM資料表空間中,所有段類型都有資格獲得線上段收縮除了這些:
· IOT mapping tables
· Tables with rowid based materializedviews
· Tables with function-based indexes
· SECUREFILE LOBs
· Compressed tables
收縮資料庫段線上可能導致依賴資料庫物件變得無效。
6、shrink space的對象有: table,index-organized table, index, partition, subpartition, materialized
view, ormaterialized view log. 使用下列SHRINK SPACE語句:ALTERTABLE,ALTERINDEX,ALTERMATERIALIZEDVIEW,
orALTERMATERIALIZEDVIEWLOG
7、兩個可選條款讓你如何控制shrink操作:
COMPACT clause將
shrink segment 操作分成了兩個階段。.當指定COMPACT時,Oracle資料庫對段空間整理磁碟片段和壓縮表中的行但延遲重設高水位線和回收空間,直到未來的某一個時間。如果你有長時間啟動並執行查詢可能跨度操作並且試圖讀取塊已回收,那麼這個選項是有用的。磁碟重組和壓縮結果被儲存到磁碟,所以資料移動不需要在第二階段重做,可以在非高峰期使用SHRINKSPACE時不加COMPACT,完成第二階段。
CASCADE使segment shrink操作擴充到所有依賴段的對象。例如,當收縮一個表的段時,如果您指定CASCADE,這張表的所有索引也將縮小。(你不需要指定級聯來縮小分區的分區表)。
與其它DDL操作,segment shrink導致隨後的SQL語句reparsed因為失效的遊標,除非你指定緊湊的條款
8、Examples
Shrink a table and all of its dependent segments (includingBASICFILE LOB segments):
ALTER TABLEemployees SHRINK SPACE CASCADE;
Shrink aBASICFILE LOB segment only:
ALTER TABLEemployees MODIFY LOB (perf_review) (SHRINK SPACE);
Shrink a singlepartition of a partitioned table:
ALTER TABLEcustomers MODIFY PARTITION cust_P1 SHRINK SPACE;
Shrink an IOT indexsegment and the overflow segment:
ALTER TABLE citiesSHRINK SPACE CASCADE;
Shrink an IOToverflow segment only:
ALTER TABLE citiesOVERFLOW SHRINK SPACE;