整理自 Oracle 資深顧問羅女士《大批量數據處理技術》演講,結合實務經驗,系統闡述分區類型、索引策略、維護操作、Exchange/TTs 技術、滾動窗口與效能評估。
| 策略 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| Range (范圍) | 時間序列:日/月/年 | 管理易、支援歷史清除、備份 | 資料傾斜、值相關維護難 |
| Hash (雜湊) | 需均勻分佈、PDML、Join | 資料均勻、實施易、效能佳 | 無法控制具體值、管理弱 |
| List (列表) | 離散值:地區、狀態、類別 | 精確控制值分佈 | 單欄位、資料可能不均 |
| Composite (複合) | Range-Hash、Range-List | 兼具歷史管理與均勻分佈 | 定義複雜、Global Index 不支援 |
CREATE TABLE graderecord ( sno VARCHAR2(10), sname VARCHAR2(20), dormitory VARCHAR2(3), grade INT ) PARTITION BY RANGE (grade) ( PARTITION bujige VALUES LESS THAN (60), PARTITION jige VALUES LESS THAN (85), PARTITION youxiu VALUES LESS THAN (MAXVALUE) );
CREATE TABLE graderecord (...) PARTITION BY HASH (sno) ( PARTITION p1, PARTITION p2, PARTITION p3 );
CREATE TABLE graderecord (...)
PARTITION BY LIST (dormitory) (
PARTITION d229 VALUES ('229'),
PARTITION d228 VALUES ('228'),
PARTITION d240 VALUES ('240')
);
CREATE TABLE graderecord (...)
PARTITION BY RANGE (grade)
SUBPARTITION BY HASH (sno, sname) (
PARTITION p1 VALUES LESS THAN (75) (
SUBPARTITION sp1, SUBPARTITION sp2
),
PARTITION p2 VALUES LESS THAN (MAXVALUE) (
SUBPARTITION sp3, SUBPARTITION sp4
)
);
CREATE TABLE MobileMessage (
ACCT_MONTH VARCHAR2(6), AREA_NO VARCHAR2(10), DAY_ID VARCHAR2(2),
SUBSCRBID VARCHAR2(20), SVCNUM VARCHAR2(30)
)
PARTITION BY RANGE (ACCT_MONTH, AREA_NO)
SUBPARTITION BY LIST (DAY_ID)
SUBPARTITION TEMPLATE (
SUBPARTITION sub1 VALUES ('01'), ..., SUBPARTITION sub31 VALUES ('31')
)
( PARTITION p_0701_010 VALUES LESS THAN ('200701','011'), ... );
| 操作 | 語法 | 說明 | ||
|---|---|---|---|---|
| SPLIT | ALTER TABLE t SPLIT PARTITION p AT (val) INTO (p1, p2) | 一分為二 | ||
| MERGE | ALTER TABLE t MERGE PARTITIONS p1, p2 INTO PARTITION p_new | 二合為一 | ||
| ADD | ALTER TABLE t ADD PARTITION p_new ... | Range 需 > MAXVALUE | ||
| DROP | ALTER TABLE t DROP PARTITION p | 資料同步刪除 | ||
| TRUNCATE | ALTER TABLE t TRUNCATE PARTITION p | 清空資料保留結構 | ||
| EXCHANGE | ALTER TABLE t EXCHANGE PARTITION p WITH TABLE t2 INCLUDING INDEXES | 秒級資料切換 | ||
| MOVE | ALTER TABLE t MOVE PARTITION p TABLESPACE ts | 遷移表空間 | ||
| COALESCE | ALTER TABLE t COALESCE PARTITION | Hash/List 合併 |
| 類型 | 定義 | 分區消除 | 唯一性 | 維護 |
|---|---|---|---|---|
| Local Prefixed | 分區鍵 = 索引前導欄 | 支援 | 支援 | 自動同步 |
| Local Non-prefixed | 分區鍵非前導欄 | 需謂詞含分區鍵 | 需含分區鍵 | 自動同步 |
| Global Prefixed | 獨立分區機制,前導欄分區 | 支援 | 支援 | 手動 REBUILD |
| Non-partitioned | 傳統索引 | 不支援 | 支援 | 手動 |
-- 建分區表 + Local Prefixed/Non-prefixed 索引 -- 將部分表空間 OFFLINE 模擬損壞 -- 查詢含分區鍵 → 成功(消除損壞分區) -- 查詢無分區鍵 → ORA-00376/ORA-01110(掃描到損壞分區)


UPDATE GLOBAL INDEXES 避免 UNUSABLE