論壇討論揭示常見誤區:DB2 的「分區」概念易與「資料庫分區(DPF,跨節點分散)」混淆。提問者期望在單實例內實現類似 Oracle PARTITION BY RANGE 的表級分區,使查詢 WHERE SUBPARTNO=30 僅掃描對應表空間 TBS_IN30,達成分區裁剪。
CREATE TABLE FO_GINCALL (...)
PARTITION BY RANGE (SUBPARTNO) (
PARTITION P_GINCALL_01 VALUES LESS THAN (2) TABLESPACE TBS_IN01,
PARTITION P_GINCALL_02 VALUES LESS THAN (3) TABLESPACE TBS_IN02,
...
PARTITION P_GINCALL_31 VALUES LESS THAN (MAXVALUE) TABLESPACE TBS_IN31
);
特性:每分區獨立表空間、儲存參數、可獨立備份/維護、查詢自動裁剪。
CREATE TABLE FO_GINCALL (...)
ORGANIZE BY DIMENSIONS (SUBPARTNO)
-- 自動生成區塊索引,查詢時跳過不相關區塊
優點:無需手動建分區,自動維護區塊對應;缺點:非傳統範圍分區語義,單維度時效果接近。
CREATE TABLE FO_GINCALL (...)
PARTITION BY RANGE (SUBPARTNO) (
PARTITION P_GINCALL_01 STARTING FROM (1) ENDING AT (1) IN TBS_IN01,
PARTITION P_GINCALL_02 STARTING FROM (2) ENDING AT (2) IN TBS_IN02,
...
PARTITION P_GINCALL_31 STARTING FROM (31) ENDING AT (MAXVALUE) IN TBS_IN31
);
關鍵差異:DB2 用 STARTING/ENDING 替代 VALUES LESS THAN,支援每分區指定表空間,實現真正的物理隔離與分區裁剪。
| 類型 | 層級 | 目的 | 典型語法 |
|---|---|---|---|
| 資料庫分區 (DPF) | 實例/節點 | 跨機器水平擴展、共享無架構 | CREATE DATABASE ... ON NODEGROUP |
| 表空間分佈 | 容器/節點組 | 資料在節點間 Hash 分佈 | CREATE TABLESPACE ... ON NODEGROUP |
| 表分區 (Table Partitioning) | 單表內部 | 生命週期管理、分區裁剪、滾動載入/清理 | PARTITION BY RANGE ... |
提問者第 4、5 點疑慮:PARTITIONING KEY ... USING HASHING 屬 DPF 層面,決定資料落在哪個節點,而非表內分區;表空間跨節點時,無法指定某分區落在特定節點容器——這正是 DPF 與表分區的分工界線。
ALTER TABLE ... DETACH/ATTACH PARTITION 實現歷史資料快速歸檔與新分區掛載,無需重寫資料。DB2 確實支援表級範圍分區(V9.7+),語法與 Oracle 相似但細節不同。核心價值在於「分區裁剪」與「生命週期管理」,而非跨節點分散。遷移時須區分 DPF、表空間分佈、表分區三層架構,避免概念混淆導致設計偏差。