这个调用的输出生成一个 prod.del 文件和一个或多个包含 XML 数据的 lob 文件。
100-100-01,Denim Roll Cuff Crop Pants,pants,+024.89,prod.del.001.lob.0.474/
100-100-02,Bermuda Shorts,shorts,+09.99,prod.del.001.lob.474.488/
| 重点: 如果 XML 数据的列类型是 VARCHAR,那么需要在 select 语句中将这个列转换为 CLOB,以防止 XML 数据被放在 DEL 文件中。
DB2 export to C:/temp/migration/export/prod.del of del LOBS
to C:/temp/migration/export/lobs modified by LOBSINFILE
select pid,name,category,price,cast(Info as clob) from product
| cast (Info as clob) 确保 XML 数据导出到 lob 文件,而不是添加到分界的(DEL)文件中。
如果没有转换这个列,那么输出会像下面这样:
100-100-01,Denim ,pants,+024.89,
100-100-02,Bermuda ,shorts,+09.99,
| IMPORT 命令无法处理这种格式,因为它认为这是非良构的 XDS。
将 XML 数据导入 DB2 Viper
现在可以使用 IMPORT 实用程序将导出的数据导入新数据库中创建的表中。传递 DEL 文件的名称和 LOB 文件的路径。
DB2 IMPORT FROM C:/temp/migration/export/prod.del OF DEL LOBS FROM
C:/temp/migration/export/lobs MODIFIED BY XMLCHAR INSERT INTO product;
| 注意: 对于分解到关系列的 XML 数据,不需要迁移数据。
迁移 XML 数据上的索引
在 DB2 Version 8.x 中,XML 列中存储的 XML 数据可以利用关系副表建立间接索引。将副表中的值与 XML 列中的文档关联起来的映射信息在 DAD 文件中定义。
由于 DB2 Viper 能够创建直接定位 XML 文档内部的路径的 XML 索引,所以不再需要使用副表来建立间接关系索引。用来创建 XML 索引的一些关键参数与 DAD 映射中的参数相似。可以使用 DAD 映射中这些参数的值来创建 XML 索引。现在来分析一个 DAD 映射示例,这个 DAD 映射用来为 DB2XML.XMLCLOB 类型的 purchaseorder 列创建副表。
path="/purchaseOrder/shipTo/name" multi_occurrence="NO"/>
| 这个映射中关键的参数是 //column/@path 和 //column/@type。
在 DB2 Viper 中相应的 XML 索引是:
create index order_name on purchaseorder (info) generate key using
xmlpattern '/purchaseOrder/ shipTo/name' as SQL VARCHAR(128);
| DAD 中的 //column/@path 值与 XML 索引中的 xmlpattern 相同,DAD 中的 //column/@type 值与 SQL 类型相同。
另一个重要之处是根 ID,当用这个 DAD 文件在 DB2 Version 8.x 中启用 XML 列时,这个值传递给 enable_column 调用。
dxxadm enable_column migrate purchaseorder info
"/home2/hardeep/migrate/po.dad" -r poid
| 这个根 ID 标识出表中一个主键的名称,这个主键被添加到副表中,用来将副表与包含 XML 列的表关联起来。根 ID 的值在 XML 列上是惟一的。这个根 ID 对应于 XML 文档中的路径值,惟一地定义 XML 列中的这个文档。
所以,当为 DB2 Viper 创建 XML 索引时,可以在 DB2 Version 8.x 中定义根 ID(主键)的路径上创建惟一索引(如果主键在 XML 文档中存在的话)。
create unique index order_key on purchaseorder (info) generate key using
xmlpattern '/purchaseOrder/@poid' as sql double;
| 迁移用来将 XML 数据分解为关系数据的映射文件
如果应用程序需要将输入的 XML 数据分解为关系表,而且您感觉这种需要仍然存在,那么需要将现有的 DAD 映射替换为带注释的 XML 模式映射。
表 4. XML 集合和带注释的 XML 模式之间的差异
|
XML 集合 |
新的分解 |
| 映射文件 |
DAD |
带注释的模式 |
| 功能和性能 |
有限 |
功能得到了扩展,性能更好 |
| DTD/模式 |
不需要。可以注册,也可以不注册。 |
需要。必须注册。 | 注意: 在这两种映射中,关系表都必须提前存在。 |