首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 V9.7 新特性:支援 XML 資料的分區表完整指南

     編輯:DB2 教學

概述

DB2 V9.7 大幅擴展 pureXML 功能,正式支援分區表儲存 XML 資料,並相容 MDC 表、宣告式暫存表、使用者自訂函數及分區資料庫環境 (DPF)。本文詳細說明建立/管理含 XML 欄位的分區表、資料與索引物件儲存策略、XML 資料高效轉入轉出 (Roll-in/Roll-out)、查詢效能提升 (分區剪除) 等關鍵技術,並附完整實作範例。

核心能力與限制

  • ✅ CREATE TABLE 可直接定義 XML 欄位;ALTER TABLE ADD COLUMN 可為現有分區表新增 XML 欄位
  • ✅ ALTER TABLE ADD/ATTACH/DETACH PARTITION 完整支援含 XML 資料的分區操作
  • ✅ 每個資料分區及其關聯的 XML 儲存物件 (XDA) 可置於相同或不同表空間
  • ✅ 基於 XML 的非分區索引可獨立置於不同表空間並單獨 REORG
  • ✅ 透過表空間備份實現分區級備份
  • ⚠ 限制:XML 欄位不可作為分區鍵;使用者建立的 XML 索引只能是非分區索引

實作環境建置

-- 建立資料庫
db2 CREATE DB MYDB

-- 建立多個表空間 (自動擴展)
CREATE TABLESPACE TbspXT MANAGED BY DATABASE USING (FILE 'tspXT' 4 M) AUTORESIZE YES;
CREATE TABLESPACE TbspXD MANAGED BY DATABASE USING (FILE 'tspXD' 4 M) AUTORESIZE YES;
CREATE TABLESPACE TbspXW MANAGED BY DATABASE USING (FILE 'tspXW' 4 M) AUTORESIZE YES;
CREATE TABLESPACE IXTbspXX MANAGED BY DATABASE USING (FILE 'ixtspXX' 4 M) AUTORESIZE YES;
CREATE TABLESPACE IXTbspXY MANAGED BY DATABASE USING (FILE 'ixtspXY' 4 M) AUTORESIZE YES;
CREATE TABLESPACE IXTbspXW MANAGED BY DATABASE USING (FILE 'ixtspXW' 4 M) AUTORESIZE YES;

查詢表空間 ID 以利後續驗證:

SELECT SUBSTR(TBSPACE,1,15) AS TBSPACE, TBSPACEID 
FROM SYSCAT.TABLESPACES WHERE TBSPACE LIKE '%TBSPX%' ORDER BY TBSPACEID;

建立含 XML 欄位的分區表

CREATE TABLE XMLPARTT (c1 INT, doc XML) 
  IN TbspXT INDEX IN IXTbspXX
  PARTITION BY (c1)
  ( STARTING 0 ENDING 10 IN TbspXD,
    STARTING 11 ENDING 20 INDEX IN IXTbspXY,
    STARTING 21 ENDING 30 IN TbspXW INDEX IN IXTbspXW,
    STARTING 31 ENDING 40 INDEX IN IXTbspXW,
    STARTING 41 ENDING 50 );

關鍵點:

  • 分區層級 IN / INDEX IN 子句控制各分區資料與索引物件位置
  • 若省略分區層級子句,則沿用表層級預設值
  • 每個資料分區的 XML 儲存物件 (XDA) 自動置於相同表空間

資料插入與 XML 索引建立

-- 插入測試資料 (20 筆)
INSERT INTO XMLPARTT VALUES (1, 'hohointern');
-- ... 略

-- 建立兩個 XML 索引,指定/不指定表空間
CREATE INDEX idxxml1 ON XMLPARTT(doc) GENERATE KEY USING XMLPATTERN '//name' AS SQL VARCHAR(50) IN IXTbspXW;
CREATE INDEX idxxml2 ON XMLPARTT(doc) GENERATE KEY USING XMLPATTERN '//role' AS SQL VARCHAR(50);

✅ 可對單一 XML 索引獨立執行 REORG INDEX idxXML1。

目錄檢視深度解析

SYSCAT.TABLES / SYSCAT.INDEXES

SELECT SUBSTR(TABNAME,1,10) TABNAME, TABLEID, TBSPACEID FROM SYSCAT.TABLES WHERE TABNAME='XMLPARTT';
-- TABNAME TABLEID TBSPACEID
-- XMLPARTT -32768 -6  (分區表特有邏輯 ID)

SELECT SUBSTR(TABNAME,1,10) TABNAME, SUBSTR(INDNAME,1,20) INDNAME, INDEXTYPE, TBSPACEID, INDEX_OBJECTID 
FROM SYSCAT.INDEXES WHERE TABNAME='XMLPARTT';
-- 索引類型說明:
-- XRGN: XML 區域索引 (分區索引)
-- XVIL: XML 邏輯索引 (非分區)
-- XVIP: XML 物理索引 (非分區)
-- XPTH: XML 路徑索引 (非分區)

驗證結果顯示:

  • 使用者索引 IDXXML1 (邏輯/物理) 置於表空間 ID 8 (IXTBSPXW),符合建立時 IN IXTbspXW
  • 使用者索引 IDXXML2 置於表空間 ID 6 (IXTBSPXX),沿用表層級 INDEX IN
  • XML 區域索引為分區索引,邏輯 ID (65530, 32768)

SYSCAT.DATAPARTITIONS / SYSCAT.INDEXPARTITIONS

SELECT SUBSTR(DATAPARTITIONNAME,1,20) DATAPARTITIONNAME, PARTITIONOBJECTID, TBSPACEID, SUBSTR(TABNAME,1,10) TABNAME 
FROM SYSCAT.DATAPARTITIONS WHERE TABNAME='XMLPARTT';
-- 5 個資料分區,各自 TBSPACEID 對應建表指定表空間

SELECT SUBSTR(TABNAME,1,10) TABNAME, SUBSTR(INDNAME,1,20) INDNAME, INDPARTITIONTBSPACEID, INDPARTITIONOBJECTID, DATAPARTITIONID 
FROM SYSCAT.INDEXPARTITIONS WHERE TABNAME='XMLPARTT';
-- XML 區域索引 5 個索引分區,表空間分布由分區層級 INDEX IN 控制

XML 資料高效轉入/轉出 (Roll-in / Roll-out)

Roll-in:ATTACH PARTITION

-- 建立非分區 XML 表並插入資料 (分區範圍外)
CREATE TABLE temp (c1 INT, doc XML);
INSERT INTO temp VALUES (51, 'wawamgr');
-- ... 共 3 筆

-- 轉入
ALTER TABLE XMLPARTT ATTACH PARTITION STARTING 51 ENDING 60 FROM temp;
SET INTEGRITY FOR XMLPARTT IMMEDIATE CHECKED;
-- 驗證
SELECT COUNT(*) FROM XMLPARTT WHERE c1 > 50;  -- 返回 3

操作會將表置於 Set Integrity Pending 狀態,需執行 SET INTEGRITY 完成索引/資料一致性維護。轉入後 SYSCAT.DATAPARTITIONS 新增一分區,SYSCAT.INDEXPARTITIONS 新增對應索引分區。

Roll-out:DETACH PARTITION

ALTER TABLE XMLPARTT DETACH PARTITION part5 INTO temp;
-- 驗證
SELECT COUNT(*) FROM XMLPARTT WHERE c1 > 50;  -- 0
SELECT COUNT(*) FROM temp;                    -- 3

轉出瞬間完成,無需 SET INTEGRITY,原分區資料移至獨立表 temp。

效能優勢總結

  • 分區剪除:針對 XML 欄位查詢時,若分區鍵出現在謂詞中,最佳化器可跳過無關分區
  • 並行處理:跨分區並行掃描、索引存取
  • 維護彈性:單一分區/索引 REORG、BACKUP、ROLL-IN/OUT 不影響其他分區
  • 儲存隔離:熱/冷資料分置不同儲存層 (SSD/HDD)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved