| 免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版 |
|---|
| 下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。 |
在一个复杂的 DB2 使用环境中,可能存在不同版本的 DB2 数据库和 Q 复制服务器共存的情况。对于一个 IT 系统历史比较久远的企业而言,出现这样的情况是非常正常的。DB2 数据库技术发展到今天已经非常成熟,如果没有新的需求用户不会轻易投资升级运转良好的现有数据库系统。相对而言 Q 复制服务器面世才仅仅七年时间,产品功能随着新版本的推出还在快速发展中。如果用户希望使用较新的 Q 复制服务器版本中提供的新功能,为较旧版本的 DB2 数据库复制数据,就会面临版本兼容性的问题。如果用户希望使用单一的 Q 复制管理工具在多个不同版本的 DB2 数据库上配置和管理 Q 复制,版本兼容性问题就会变得更加复杂。
本文将解释 Q 复制环境中的三个核心部件(DB2 数据库,Q 复制服务器,和 Q 复制管理工具)之间的版本兼容性。这些部件可以独立部署在不同的系统上并拥有不同的版本。我们将讨论当这些部件的版本不一致时,什么时候它们能够协同工作,什么时候则必须做出改变以及须做出何种改变才能让它们协同工作。了解这些知识对于在老版本 DB2 数据库环境中部署新版本的 Q 复制服务器产品,以及升级老版本的 Q 复制服务器而言都是至关重要的。
Q 复制是一种数据库复制技术,目前包含在产品 IBM InfoSphere Replication Server 中。这个产品为把一张 DB2 数据库表中的数据复制到另一张 DB2 数据库表中提供了两种方法,一种叫 SQL 复制,另一种叫 Q 复制。本文仅讨论开放平台上的 Q 复制。这个产品以前还用过其它名称,包括 DB2 Information Integrator,WebSphere Information Integrator,和 WebSphere Replication Server。Q 复制功能的第一次面世是在 DB2 Information Integrator V8.2 中,发布于 2004 年,和 DB2 V8.2 同时期发布。更早之前的产品中只含有 SQL 复制功能。
Q 复制是 InfoSphere Replication Server(以下简称复制服务器或者 IRS)产品支持的一种复制技术,为客户提供高吞吐量低延迟的事务级复制方案。它通过 WebSphere MQ 消息队列以事务为单位从源数据库到目标数据库传送 DB2 数据变动。它有两个主要的部件:Q Capture 和 Q Apply 程序。Q Capture 通过分析源 DB2 数据库的交易日志获取所关注表上的数据变动,将这些提交的变动作为 MQ 消息放入 MQ 队列,这就意味着这个处理对源数据库是异步的,而且只有提交的数据变化才会被送到 MQ;Q Apply 程序负责从 MQ 队列取出这些消息,重新建造事务,并将其应用到目标数据库或存储过程。
Q 复制技术和 DB2 有非常密切的关系,它主要支持 DB2 数据库之间的数据复制(尽管也支持其他数据库但支持得远不如 DB2 那么彻底)。它的元数据也存放在源和目标 DB2 数据库的一些 DB2 表中,称为 Q 复制控制表。它的主要部件,Q Capture 和 Q Apply,其实都是为 DB2 数据库开发的应用程序。因此在产品安装时也必须和一个 DB2 实例安装在一起。用户可以在安装复制服务器时创建一个新的 DB2 实例,或者使用已经存在的 DB2 实例。
Q 复制技术的优势是:
- 低延迟(一般在一秒内)
- 高吞吐量(每秒复制数万行改动数据)
- 较少的网络流量(仅仅复制变化的数据,并且放到 MQ 队列里的消息是经过压缩的)
- 允许异步传输 (即使 Q 复制程序停止了,留在 MQ 队列里尚未复制到目标的消息仍然被保留,并且在 Q 复制程序恢复后继续被处理)
Q 复制有三个常用管理工具:
- 复制中心:一个图形用户界面,可以用它来配置、操作和监视 Q 复制环境
- ASNCLP 程序:一个命令行接口界面,可以用它来配置 Q 复制环境
- Q 复制 Dashboard:一个基于 Web 的图形用户界面,可以用它来监视和管理 Q 复制的运行状况
图 1 是一个典型的 Q 复制部署图,其中:
- 计算机 A 上安装有复制中心,作为 Q 复制管理软件。
- 服务器 B 上部署有一个 DB2 数据库,作为 Q 复制的数据来源。一般这是用户环境里的业务生产系统。Q 复制在这里创建了 Q Capture 控制表。
- 服务器 C 上部署有一个 DB2 数据库,作为 Q 复制的数据目的地。这个数据库可能有多种用途,例如用于数据备份,查询分析,负载均衡,数据审计等。Q 复制在这里创建了 Q Apply 控制表。
- 服务器 D 上运行 Q Capture 程序,上面安装有 Q 复制服务器,以及 MQ 队列管理器。
- 服务器 F 上运行 Q Apply 程序,上面安装有 Q 复制服务器,以及 MQ 队列管理器;
- E 代表 MQ 队列中传送的 MQ 消息。不同版本的 Q Capture 会发送不同版本的消息通过 MQ 队列传输到 Q Apply 程序
图 1. 典型的 Q 复制部署图
从图 1 可以看出,源 DB2 数据库、目标 DB2 数据库、Q Capture 程序、Q Apply 程序和 Q 复制管理工具(本文只涉及复制中心和 ASNCLP)都可以独立部署,并拥有不同的版本。我们将就这些部件不同版本之间的兼容性进行探讨。本文将主要讨论 V9.1(所有修订包),V9.5(所有修订包),V9.7 早期版本(FP2 或更早的修订包)和 V9.7 后期版本(FP3 和 FP4)这几个版本类别。
Q 复制控制表里让人迷惑的 COMPATIBILITY 和 ARCH_LEVEL
创建好 Q 复制控制表后,会看到 Q Capture 控制表 (SCHEMA).IBMQREP_CAPPARMS 中有两个字段分别叫 COMPATIBILITY 和 ARCH_LEVEL。例如清单 1 所示:
清单 1.创建 Q 复制控制表
db2 "select COMPATIBILITY, ARCH_LEVEL from ASN.IBMQREP_CAPPARMS" COMPATIBILITY ARCH_LEVEL ------------- ---------- 0907 0973 1 record(s) selected. |
Q Apply 控制表 (SCHEMA).IBMQREP_APPLYPARMS 中也有一个字段叫 ARCH_LEVEL。
这几个字段分别是什么意思呢?
字段 ARCH_LEVEL 表示 Q Capture 或者 Q Apply 控制表自身的版本,即使用 Q 复制管理工具(如复制中心、ASNCLP 程序)创建的作为元数据使用的一组 DB2 表的版本。当产品版本提高,功能变丰富,控制表的定义或者结构发生变化时,就需要使用新的 ARCH_LEVEL 编号。每个版本的 Q Capture 程序或者 Q Apply 程序只能使用相应版本的控制表。表 1 列举了所有 Q Capture/Apply 控制表 ARCH_LEVEL 允许的取值以及对应的 Q Capture/Apply 程序版本。
表 1. Q Capture/Apply 的 ARCH_LEVEL
| Q Capture/Apply 程序版本 | Q Capture/Apply 控制表 ARCH_LEVEL | 创建控制表时指定的 RELEASE 值 |
|---|---|---|
| V9.1 及所有修订包 | 0901 | 9.1 |
| V9.5 及所有修订包 | 0905 | 9.5 |
| V9.7,及修订包 FP1,FP2 | 0907 | 9.7 |
| V9.7 修订包 FP3 或更高 | 0973 | 9.7.3 |
字段 COMPATIBILITY 表示在 Q 复制里 Q Capture 程序所发送的消息的版本。每个版本的 Q Capture 程序可以发送相应版本或更低版本的消息。例如,版本 V9.7 的 Q Capture 程序可以发版本为’ 0901 ’、’ 0905 ’或者’ 0907 ’的消息。每个版本的消息则可以被相应版本或者更高版本的 Q Apply 程序识别处理。例如,’ 0905 ’的消息可以被版本 V9.5 或者 V9.7 的 Q Apply 程序处理。
表 2 列举了所有的消息版本编号以及能够发送这些消息的 Q Capture 程序。
表 2. Q Capture 程序支持的 COMPATIBILITY 值
| COMPATIBILITY ?Q Capture 程序版本 | 0901 | 0905 | 0907 |
|---|---|---|---|
| V9.1 及所有修订包 | √ | × | × |
| V9.5 及所有修订包 | √ | √ | × |
| V9.7 及所有修订包 | √ | √ | √ |
√:支持
×:不支持
Q 复制服务器的版本需要高于或等于 DB2 数据库的版本,才能协同工作。具体来说,Q Capture 程序的版本要高于或等于源 DB2 数据库的版本,Q Apply 程序的版本要高于或等于目标 DB2 数据库的版本。需要特别注意的是,在版本不一致的情况下,还需要符合下列条件:
- Q Capture 程序和源 DB2 数据库的代码页必须相同。
- Q Apply 程序和目标 DB2 数据库的代码页必须相同。
- Q Capture 程序所在机器和源 DB2 数据库所在机器的字符位序必须相同,要么都是 big-endian,要么都是 little-endian。
表 3. DB2 数据库和 Q 复制服务器之间的版本兼容
| DB2 源 / 目标数据库? Q Capture/Apply 程序 | V9.7 及各修订包 | V9.5 及各修订包 | V9.1 及各修订包 |
|---|---|---|---|
| V9.7 及各修订包 | √ | × | × |
| V9.5 及各修订包 | √ | √ | × |
| V9.1 及各修订包 | √ | √ | √ |
√:兼容
×:不兼容
对于不兼容的情况,需要将 Q 复制服务器升级到和 DB2 数据库兼容的更高版本。具体操作参见本文章最后一部分“一个简单的 Q 复制从低版本到高版本的升级实例”。
在使用 Q 复制管理工具为一个低版本 DB2 数据库创建更高版本的 Q 复制控制表时,需要手工指定控制表的版本参数,否则就会按照 DB2 数据库的版本来创建 Q 复制控制表。例如,使用 ASNCLP 的 CREATE CONTROL TABLES 语句创建 Q 复制控制表,可以通过参数“REALEASE”来指定需要创建的 Q 复制控制表版本。“表 1”中也列举了和各 ARCH_LEVEL 对应的“REALEASE”参数值。
清单 2 是一个 ASNCLP 脚本示例,在版本 V9.1 的数据库里创建给版本 V9.7 Q Capture 程序使用的控制表。
清单 2. 为 V91 的数据库创建’ 0907 ’的控制表
ASNCLP SESSION SET TO Q REPLICATION;
SET RUN SCRIPT NOW STOP ON SQL ERROR ON;
SET QMANAGER "ASNQ.MANAGER" FOR CAPTURE SCHEMA;
SET CAPTURE SCHEMA SOURCE ASN;
SET SERVER CAPTURE TO DB SRCDB ID db2inst1 PASSWORD“password“;
CREATE CONTROL TABLES FOR CAPTURE SERVER USING RESTARTQ " RESTARTQ" ADMINQ "ADMINQ"
RELEASE "9.7";
QUIT;
|
不同版本的 Q Capture 和 Q Apply 程序之间的兼容性通过 Q Capture 控制表 IBMQREP_CAPPARMS 中字段 COMPATIBILITY 来调节。任意一个 Q Capture 和 Q Apply 程序的版本组合,都有合适的 COMPATIBILITY 值来让他们兼容工作。当 COMPATIBILITY 的值小于或者等于 Q Capture 和 Q Apply 中较小的 ARCH_LEVEL 值时,Q Capture 和 Q Apply 是兼容的。具体的兼容性列表如表 4 所示:
表 4. Q Capture 和 Q Apply 程序的兼容
| Q Capture | Q Apply | COMPATIBILITY | ||
|---|---|---|---|---|
| 0907 | 0905 | 0901 | ||
| V9.7 及各修订包 | V9.7 及各修订包 | √ | √ | √ |
| V9.7 及各修订包 | V9.5 及各修订包 | × | √ | √ |
| V9.7 及各修订包 | V9.1 及各修订包 | × | × | √ |
| V9.5 及各修订包 | V9.7 及各修订包 | × | √ | √ |
| V9.5 及各修订包 | V9.5 及各修订包 | × | √ | √ |
| V9.5 及各修订包 | V9.1 及各修订包 | × | × | √ |
| V9.1 及各修订包 | V9.7 及各修订包 | × | × | √ |
| V9.1 及各修订包 | V9.5 及各修订包 | × | × | √ |
| V9.1 及各修订包 | V9.1 及各修订包 | × | × | √ |
√:兼容
×:不兼容
对于不兼容的情况,要想使 Q Capture 和 Q Apply 协同工作,需要将 COMPATIBILITY 改低,或者将低版本的 Q Capture 或 Q Apply 程序及控制表升级到更高版本。具体操作参见本文章最后一部分“一个简单的 Q 复制从低版本到高版本的升级实例”。
和大多数客户端 / 服务器软件一样, Q 复制管理工具的版本需要等于或高于 Q 复制服务器的版本。例如,V9.7 FP3 的复制管理工具能创建和管理版本 V9.7,V9.5,或者 V9.1 的 Q 复制程序和它们的控制表。具体兼容性结果列表如表 5 所示。
表 5. Q 复制服务器和 Q 复制管理工具之间的版本兼容
| Q 复制管理工具? Q Capture/Apply | V9.7 及各修订包 | V9.5 及各修订包 | V9.1 及各修订包 |
|---|---|---|---|
| V9.7 及各修订包 | √ | √ | √ |
| V9.5 及各修订包 | × | √ | √ |
| V9.1 及各修订包 | × | × | √ |
√:兼容
×:不兼容
对于不兼容的情况,可以通过安装新版本的 Q 复制管理工具,把 Q 复制管理工具升级到合适的版本。
下面以一个简单的实例介绍如何将 Q 复制环境从低版本升级到高版本。
假定源 DB2 数据库为 SOURCE,安装在一台 Linux 机器(M1)上。目标 DB2 数据库为 TARGET,安装在一台 AIX 机器(M3)上。他们的版本都是 V9.5。Q 复制服务器安装在另外一台 Linux 机器(M2)上,版本也是 V9.5,并配置了从 SOURCE 到 TARGET 的单向 Q 复制。
现在想要将 Q 复制的版本升级到 V9.7,但并不升级源和目标 DB2 服务器。
具体操作步骤如下:
- 在 M2 上停止 Q 复制程序。包括停止 Q Capture 和 Q Apply 程序。
- 在 M2 上卸载已经安装的 Q 复制 V9.5。
- 在 M2 上安装 Q 复制 V9.7。
- 在 M3 上升级 Q Apply 控制表到 V97。
- 在 M2 的 Q 复制安装目录里找到样例脚本,路径为 samples/repl/mig97/q/ asnqappluwv97.sql
- 按照样例脚本里的注释说明,将一些通用模式替换为实际环境里的值(例如,替换 !applyschema! 为 Q Apply 的 schema 名)
- 在 M3 上运行此脚本。它将修改 Q Apply 控制表。
- 在 M1 上升级 Q Capture 控制表到 V97
- 在 M2 的 Q 复制安装目录里找到样例脚本,路径为 samples/repl/mig97/q/ asnqcapluwv97.sql
- 按照样例脚本里的注释说明,将一些通用模式替换为实际环境里的值(例如,替换 !capschema! 为 Q Capture 的 schema 名)
- 在 M1 上运行此脚本。它将修改 Q Capture 控制表。
- 将控制表 IBMQREP_CAPPARMS 里 COMPATIBILITY 列的值改为’ 0907 ’。
- 在 M2 上启动 Q Capture 程序。第一次启动时必须指定如下参数
startmode=warmns migrate=y - 在 M2 上启动 Q Apply 程序
到此一个完整的 Q 复制从 V9.5 到 V9.7 的升级过程就完成了。
如果需要从 V9.1 升级到 V9.7,那么在升级 Q Capture 或者 Q Apply 控制表时,必须先把控制表从 V9.1 升级到 V9.5,然后再从 V9.5 升级到 V9.7。
本文就 Q 复制环境中初学者对于版本可能会感到迷惑的地方进行阐述,并以一个实例介绍了如何将单向 Q 复制从低版本升级到高版本。其中涉及的具体参数解释和操作步骤,可以参考“参考资料“里的 DB2 Information Center。
学习
- 通过
developerWorks Information Management 专区 学习关于 IM 的更多知识。
- 通过 IM 专区
DB2 9 技术资源中心 了解 DB2 产品更多信息和相关技术。
- 通过 IBM DB2 9.7 for Linux,UNIX, and Windows 信息中心,查看 InfoSphere Replication Server 更多有关信息。
- 通过 如何将 DB2 SQL 复制环境从 V8 升级到 V9了解 SQL 复制如何从 V8 升级到 V9。
-
随时关注 developerWorks技术活动和 网络广播。
获得产品和技术
- 要开始学习,请先下载并安装
DB2 Express-C或者 DB2 Enterprise Edition 试用版本。
讨论
- 如有任何疑问,可以访问
DB2 Express-C 论坛或 DB2 中国网站。
- 加入
developerWorks
博客,并加入 My developerWorks 中文社区;您可以通过个人档案和定制主页获得符合自己的兴趣的 developerWorks 文章,并与其他 developerWorks 用户进行交流。

刘艳,IBM 中国软件开发中心软件工程师,InfoSphere Replication Server 项目组。拥有计算机硕士学位和 IBM DB2 730,731,733 认证。目前从事 LUW 上 InfoSphere Replication Server 的 FVT 和 performance 测试工作。
