Oracle 壓縮技術包含 Basic(基本)、OLTP、Index(索引)、HCC(混合欄式)四大類。本文聚焦最常用的 Basic 與 OLTP 壓縮,透過 6 組對照實驗量化空間節省與 DML 行為差異,提供選型決策依據。
資料區塊內重複值被提取至區塊頭部的符號表,原位置以較短的符號取代。符號空間遠小於原值,故壓縮率取決於資料重複度。



| 編號 | 操作 | 語法關鍵字 |
|---|---|---|
| 1 | Baseline CTAS | CREATE TABLE t1 AS SELECT ... |
| 2 | CTAS + Basic 壓縮 | CREATE TABLE t2 COMPRESS BASIC AS SELECT ... |
| 3 | 建壓縮表 + 一般 INSERT | CREATE TABLE t3 COMPRESS BASIC ...; INSERT INTO t3 SELECT ... |
| 4 | 建壓縮表 + Direct-path INSERT | CREATE TABLE t4 COMPRESS BASIC ...; INSERT /*+APPEND*/ INTO t4 SELECT ... |
| 5 | CTAS 無壓縮 → ALTER TABLE COMPRESS | CREATE TABLE t5 AS SELECT ...; ALTER TABLE t5 COMPRESS BASIC; |
| 6 | CTAS 無壓縮 → MOVE COMPRESS | CREATE TABLE t6 AS SELECT ...; ALTER TABLE t6 MOVE COMPRESS BASIC; |
| 表名 | Blocks | PCT_FREE | COMPRESSION | COMPRESS_FOR | Segment KB |
|---|---|---|---|---|---|
| T1 (Baseline) | 666 | 10 | DISABLED | - | 6144 |
| T2 (CTAS Basic) | 204 | 0 | ENABLED | BASIC | 2048 |
| T3 (一般 INSERT) | 622 | 0 | ENABLED | BASIC | 5120 |
| T4 (Direct-path INSERT) | 204 | 0 | ENABLED | BASIC | 2048 |
| T5 (ALTER COMPRESS) | 666 | 10 | ENABLED | BASIC | 6144 |
| T6 (MOVE COMPRESS) | 204 | 0 | ENABLED | BASIC | 2048 |
/*+APPEND*/)、ALTER TABLE MOVE COMPRESS。INSERT、ALTER TABLE COMPRESS(僅改屬性,不重組現有資料)。PCT_FREE=0 表示 Oracle 假設壓縮表極少更新,適合歷史資料、資料倉儲、唯讀報表表。對應表名 T21~T26,測試邏輯同 Basic。
| 表名 | Blocks | PCT_FREE | COMPRESSION | COMPRESS_FOR |
|---|---|---|---|---|
| T21 (Baseline) | 666 | 10 | DISABLED | - |
| T22 (CTAS OLTP) | 225 | 10 | ENABLED | OLTP |
| T23 (一般 INSERT) | 370 | 10 | ENABLED | OLTP |
| T24 (Direct-path INSERT) | 225 | 10 | ENABLED | OLTP |
| T25 (ALTER COMPRESS) | 666 | 10 | ENABLED | OLTP |
| T26 (MOVE COMPRESS) | 225 | 10 | ENABLED | OLTP |
PCT_FREE=10 保留更新空間,適合低頻更新的 OLTP 表、歷史分區。
| 方法 | 語法 | 現有資料壓縮 | 後續 DML 壓縮 | 鎖定行為 | 索引影響 | 適用場景 |
|---|---|---|---|---|---|---|
| 1. ALTER TABLE COMPRESS | ALTER TABLE t COMPRESS FOR OLTP; | 否 | 是 | 短暫排他鎖 | 無 | 僅需未來資料壓縮,歷史資料不壓 |
| 2. Online Redefinition | DBMS_REDEFINITION | 是 | 是 | 線上,短暫鎖定 | 全域索引需重建 | 7x24 不停機,大表轉換 |
| 3. ALTER TABLE MOVE COMPRESS | ALTER TABLE t MOVE COMPRESS FOR OLTP; | 是 | 是 | 排他鎖 (X),阻塞 DML | 索引失效需重建 | 可接受停機窗口,欲變更表空間 |
DBA_TABLES.COMPRESSION、COMPRESS_FOR 確認屬性生效。V$SEGMENT_STATISTICS 中 logical reads vs physical reads 評估 I/O 降低幅度。PCT_FREE 與行遷移,必要時 ALTER TABLE ... MOVE 整理。