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

DB2 9 vs V8.x XML 功能全方位對比遷移指南

     編輯:DB2 教學

從 DB2 V8.x XML Extender 遷移至 DB2 9 pureXML,涉及儲存模型、索引、查詢、驗證、工具鏈全面變革。本文提供詳細對照表、遷移步驟、程式碼改寫範例與注意事項,助您平滑升級。

一、架構差異總覽

面向V8.x (XML Extender)DB2 9 (pureXML)
儲存CLOB/VARCHAR/FILE 或分解關聯表原生 XML 型別,解析樹儲存
索引副表間接索引XML Pattern 直接索引節點
查詢SQL/XML + Extender UDFXQuery + SQL/XML 原生支援
驗證DTD/Schema 外部表,隱式/顯式XSR 內建,僅支援 Schema 顯式驗證
分解DAD 映射檔Annotated Schema 映射
工具Development Center 分散Control Center / Developer Workbench / VS.NET 整合
啟用需 dxxadm enable_dbUTF-8 資料庫原生支援

二、核心功能對比細節

1. XML 儲存與索引

-- V8.x: 建立副表間接索引
-- DB2 9: 直接對 XML 欄位建立 XML 索引
CREATE UNIQUE INDEX ORDER_KEY ON PURCHASEORDER (INFO)
  GENERATE KEY USING XMLPATTERN '/PURCHASEORDER/@POID' AS SQL DOUBLE;

CREATE INDEX ORDER_NAME ON PURCHASEORDER (INFO)
  GENERATE KEY USING XMLPATTERN '/PURCHASEORDER/SHIPTO/NAME' AS SQL VARCHAR(128);

XML Pattern:無述詞 XPath,僅支援子軸 / 與後代軸 //。

2. XML Schema Repository (XSR)

  • 每資料庫一個 XSR,存放 Schema、DTD、外部實體。
  • 註冊指令:REGISTER XMLSCHEMA ... FROM ... AS ... → COMPLETE XMLSCHEMA ...。
  • 大型 Schema 需調大 APPLHEAPSZ(建議 1000+)。

3. Annotated Schema 分解

在 Schema 內以註解標示關聯映射,註冊時 ENABLE DECOMPOSITION。單一文件可同時保留原生 XML 欄位與分解關聯欄位。

4. SQL/XML 新函數

分類新增函數
發布XMLCOMMENT, XMLPI, XMLTEXT, XMLDOCUMENT
解析/轉型/驗證XMLPARSE, XMLCAST, XMLVALIDATE, IS VALIDATED
查詢XMLQUERY, XMLEXISTS, XMLTABLE
序列化XMLSERIALIZE (CONTENT ... AS CLOB/BLOB)

5. XMLTABLE 範例:將 XML 節點轉關聯結果集

INSERT INTO PRODUCT (PID, INFO)
SELECT X.PID, X.DOC
FROM XMLTABLE('$INFO//PRODUCT' PASSING XMLPARSE(DOCUMENT CAST(? AS BLOB(2M))) AS "INFO"
  COLUMNS PID VARCHAR(12) PATH '@PID', DOC XML BY REF PATH '/') AS X;

三、遷移實務六步驟

  1. 建立 UTF-8 資料庫:CREATE DB MIGRATE USING CODESET UTF-8 TERRITORY US
  2. DTD 轉 Schema:從 DB2XML.DTD_REF 匯出 DTD,用工具轉 XSD。
  3. 註冊 Schema 至 XSR:REGISTER XMLSCHEMA ... COMPLETE XMLSCHEMA ...
  4. 調整表結構:將 XMLCLOB/VARCHAR/FILE 改為 XML 型別;若原建副表索引用於查詢,現可直接對 XML 欄位建 XML 索引,簡化結構。
  5. 資料遷移:
    • V8.x 匯出:EXPORT TO ... OF DEL LOBS TO ... MODIFIED BY LOBSINFILE SELECT ...
    • V9 匯入:IMPORT FROM ... OF DEL LOBS FROM ... MODIFIED BY XMLCHAR INSERT INTO ...
    • 若原欄位為 VARCHAR,匯出前 CAST(INFO AS CLOB) 強制寫入 LOB 檔。
  6. 索引遷移:依 DAD //column/@path → XMLPATTERN,//column/@type → SQL 型別;主鍵路徑建 UNIQUE INDEX。
  7. 分解映射遷移:DAD → Annotated Schema,註冊時啟用分解。

四、應用程式改寫對照

操作V8.x 寫法DB2 9 寫法
插入原生 XMLINSERT INTO CUST (INFO) VALUES (?)相同;需驗證加 XMLVALIDATE(?)
分解插入CALL DXXSHREXML(...)CALL XDBDECOMPXML(...) 或 XMLTABLE
子文件更新DB2XML.UPDATE(INFO, PATH, VAL)無內建;使用 Java Stored Procedure (developerWorks 範例)
查詢 XML 節點DB2XML.EXTRACTVARCHAR(INFO, PATH)XMLCAST(XMLQUERY(...) AS VARCHAR) 或 XMLEXISTS
XSLT 轉換XSLTRANSFORMTOCLOB(INFO, XSL)改用 XQuery + SQL/XML 發布函數(功能重疊)
關聯發布 XMLDAD 雙向映射僅 SQL/XML 發布函數

五、遷移實用程式

IBM 提供 Java 遷移工具 MigrateUtility,自動產生:匯出/修改欄位/匯入/註冊 Schema/建 XML 索引/刪除副表 的 DDL 腳本。

java Migrate -p /temp/migrate -d MIGRATE -s HARDEEP -t PURCHASEORDER -c INFO -b XMLEXTENDERDATA

六、關鍵限制與最佳實踐

  • XML 欄位限制:不可作主鍵/外鍵/唯一鍵/MDC/分區鍵;不可建一般索引;不可用於 CHECK/Generated Column/Trigger/MQT/Range Clustered Table。
  • 索引生效條件:謂詞需被索引涵蓋、資料型別一致、一致使用 /text();避免 //、*、冗餘 /text()。
  • Annotated Schema:註解不可用於驗證;遞迴 Schema 不支援分解;無 RI 支援;驗證可選;不可用於發布。
  • XMLPARSE 編碼陷阱:優先用隱式解析(傳 XML 型別參數);顯式用 CAST(? AS BLOB) 避免編碼頁轉換。
  • XMLEXISTS 陷阱:務必用方括號 [$i/customerinfo[name="Hardeep"]] 而非 $i/customerinfo[name="Hardeep"],否則非空序列皆為 True。
  • XMLVALIDATE 開銷大:僅必要時啟用;不支援 DTD 驗證。

七、結語

遷移至 pureXML 不僅是型別變更,更是應用架構簡化:商務邏輯下沉資料庫層(View/Stored Procedure),中介層輕量化,資料過濾後再傳輸,契合 SOA 理念。建議分階段遷移:優先高價值 XML 工作負載,驗證效能與功能後再全面推廣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved