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

DB2 XML Extender 完整指南:XML 資料儲存、映射與管理實戰

     編輯:DB2 教學

產品概覽:橋接關聯與 XML 世界

DB2 XML Extender 為 DB2 Universal Database 注入原生 XML 處理能力,提供用戶定義型別 (UDT)、函數 (UDF) 與預存程序三大擴展組件。核心價值在於:讓 SQL 成為存取 XML 文件的主要介面,並透過 GUI 精靈、管理預存程序與命令列工具大幅降低維運複雜度。支援三種儲存模式:資料庫內部欄位 (XMLVarchar/XMLCLOB)、外部檔案系統 (XMLFILE) 以及關聯表映射 (XML Collections),滿足歸檔、高頻查詢、大型文件等多元場景。

兩大核心架構:XML Columns vs XML Collections

XML Columns:文件級完整保存

適用於文件已存在、以讀為主、需原封不動保存原始結構的場景 (如新聞稿、訂單歸檔)。文件插入支援 XML 的欄位後,可透過 Document Access Definition (DAD) 將特定元素/屬性映射至 Side Tables (副表) 建立索引,加速頻繁查詢路徑。DB2 Text Extender 可進一步提供結構化全文檢索。啟用欄位指令範例:dxxadm enable_column XMLtest person person c:TEMPpersonColumn.dad -r id。

XML Collections:關聯級精細映射

適用於現有關聯資料需組合成 XML、或 XML 需分解入關聯表、頻繁局部更新、文件超過 2GB 等場景。DAD 定義 XML 標記與資料表欄位的雙向映射:dxxInsertXML 將文件分解入表,dxxRetrieveXML 從表組合文件。僅儲存感興趣的資料值,標記不入庫,極大節省空間並提升更新效能。

核心元件深度解析

DTD 庫與驗證機制

啟用資料庫時自動建立 DTD_REF 表,儲存 DTD 內容與中繼資料 (作者、建立者、更新者、使用計數)。透過 XMLClobFromFile UDF 可將外部 DTD 檔案匯入:INSERT INTO db2XML.dtd_ref ... VALUES ('C:TEMPperson.dtd', db2xml.XMLClobFromFile('C:TEMPperson.dtd'), 0, ...)。文件插入前可指定 DAD 中 <validation>YES</validation> 強制驗證。

DAD 映射規範:位置路徑語法全攻略

DAD 為符合 XML 格式的映射描述檔,XML_USAGE 表統一管理。位置路徑採類 XPath 語法 (清單 1):/ 根元素、/tag1/tag2 子孫鏈、//tagn 任意深度匹配、/tag1//tagn 混合模式、/tag1/tag2/@attr1 屬性存取、[@attr1="5"] 謂詞過濾。XML Columns 模式下用於定義 Side Table 索引欄位映射;XML Collections 模式下定義完整雙向轉換規則。

三大 UDT 型別選擇指南

型別儲存位置最大長度適用場景
XMLVarchar資料庫內部3 KB小型文件、高頻存取
XMLCLOB資料庫內部2 GB中大型文件、需交易一致性
XMLFILE外部檔案系統受限於檔案系統超大文件、既有檔案架構整合

安裝與驗證標準流程 (Windows 平台)

  1. 掛載光碟,閱讀 D:db2XMLyourPlatform/readme
  2. 執行 D:db2XMLnt/setup.exe,選擇 Server/Client、Typical 安裝、預設路徑 C:dxx
  3. 重啟系統
  4. 建立資料庫 CREATE DATABASE MYDB
  5. 綁定 XML Extender:cd /d C:DXXBND && db2 bind @dxxbind.lst
  6. 綁定 CLI:cd /d %DB2PATH%bnd && db2 bind @db2cli.lst
  7. 執行驗證腳本:dxxinstallchk mydb > out 2>&1,輸出應包含 DXXA006I The database was enabled successfully 等成功標記

實戰範例:人員資料全生命週期管理

環境準備

-- DTD 定義 (person.dtd)
<!ELEMENT person (firstName,lastName,country,phone*)>
<!ATTLIST person id CDATA #REQUIRED>
...

-- 建表
CREATE TABLE person(id INTEGER NOT NULL PRIMARY KEY,
  person db2xml.XMLclob notlogged);

-- 註冊 DTD
INSERT INTO db2XML.dtd_ref(dtdid, content, usage_count, author, creator, updator)
VALUES('C:TEMPperson.dtd', db2xml.XMLClobFromFile('C:TEMPperson.dtd'), 0, 'xmlext','xmlext','XMLext');

-- DAD 定義 (personColumn.dad) - 含驗證與三張 Side Tables
<Xcolumn>
  <table name="person_names">
    <column name="fname" type="varchar(50)" path="/person/firstName" multi_occurrence="NO"/>
    <column name="lname" type="varchar(50)" path="/person/lastName" multi_occurrence="NO"/>
  </table>
  <table name="person_phone_number">
    <column name="pnumber" type="varchar(20)" path="/person/phone/number" multi_occurrence="YES"/>
  </table>
  <table name="person_phone_type">
    <column name="ptype" type="varchar(20)" path="/person/phone/type" multi_occurrence="YES"/>
  </table>
</Xcolumn>

-- 啟用欄位 (含驗證與 Side Tables)
dxxadm enable_column XMLtest person person c:TEMPpersonColumn.dad -r id

CRUD 操作範例

-- INSERT: 從檔案匯入
INSERT INTO person VALUES(1, db2xml.xmlclobfromfile('c:TEMPperson.XML'));

-- EXTRACT (使用 Side Tables 索引加速)
SELECT pnumber FROM person_names t1, person_phone_number t2, person_phone_type t3
WHERE t1.id = t2.id AND t1.id = t3.id AND t2.dxx_seqno = t3.dxx_seqno
AND t1.lname='Smith' AND t3.ptype='Office';

-- EXTRACT (無 Side Tables,即時解析)
SELECT lname, fname FROM person1 t1, person_names t2
WHERE t1.id = t2.id AND db2XML.extractVarchar(person, '/person/country') = 'US';

-- UPDATE: 整份文件替換
UPDATE person SET person = db2xml.XMLCLOBFromFile('c:TEMPpersonbis.XML');

-- RETRIEVE: 匯出至檔案
SELECT db2xml.Content(person, 'c:tempretrIEvedperson.XML') FROM person WHERE id = 1;

XML Collections 實戰:客戶資料雙向轉換

-- 目標關聯表結構
CREATE TABLE Customer(ID INTEGER NOT NULL PRIMARY KEY, Country VARCHAR(30), LName VARCHAR(30), FName VARCHAR(30));
CREATE TABLE Customer_Details(ID INTEGER, Phone_Number VARCHAR(20), Phone_Type VARCHAR(20),
  CONSTRAINT CUST_DETAIL_FK FOREIGN KEY (ID) REFERENCES Customer (ID));

-- DAD 定義雙向映射 (略),支援 dxxInsertXML 分解、dxxRetrieveXML 組合
-- 適用於:現有關聯資料生成 XML、異構 XML 來源入庫、頻繁部分更新、大文件分解

總結:選型決策矩陣

決策因子選 XML Columns選 XML Collections
文件來源既有 XML 文件歸檔關聯資料生成 XML / 異構 XML 入庫
更新頻率低 (整份替換)高 (局部欄位更新)
文件大小< 2 GB任意 (可分解)
查詢模式已知熱點路徑可建 Side Table 索引標準 SQL 查詢關聯表
標記保存完整保留原始標記僅存資料值,標記不入庫

DB2 XML Extender 以 DAD 為核心映射引擎,靈活支援文件導向與資料導向兩大範式,配合 UDT 型別選擇與 Side Table 索引策略,為企業構建關聯/XML 混合資料平台提供成熟可靠的解決方案。

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