本部分详细说明在 WebSphere Message Broker 中为受支持的 AIX 平台设置和使用 DB2 JDBC "App" Type 2 XA 支持的步骤。
步骤 1. 创建 64 位 DB2 实例
WebSphere MQ V6 所使用的 XA 事务协调需要数据源位于 64 位 DB2 上。
在 AIX 上,DB2 仅限于十个共享内存分段,而这可能会限制能够建立的 DB2 JDBC 连接,从而导致在 Java Compute 节点通过 JDBC 连接到 DB2 时出现 DB2 错误消息 SQL1224N。为了克服此错误,系统需要配置为通过 TCP 连接到 DB2。遵循这些步骤,并确保在下面的步骤中正确使用配置好的数据库名称及其别名。另外,确保 DB2 TP_MON_NAME 属性设置为 MQ。仅在 Windows 上需要该设置(有关更多信息,请参见下面“使用和配置 Windows 平台”中的步骤 1)。
步骤 3. 安装 DB2 XA 交换加载库(32 位和 64 位)
在此配置中,MQ Transaction Processor 需要安装一组库,以对 DB2 进行 XA 协调调用。可通过在 MQ 安装树中提供“交换加载库”文件来达到此目的。为 MQ 中这些文件提供了源代码和构建版本,但 Message Broker 提供了可在系统将 DB2 安装在缺省位置时使用的预构建文件。要安装这些预构建 DB2 交换加载库,请执行以下步骤:
- 32 位交换加载库;将
/opt/IBM/mqsi/6.0/sample/xatm/db2swit复制到/var/mqm/exits/db2swit。 - 64 位交换加载库;将
/opt/IBM/mqsi/6.0/sample/xatm/db2swit64复制到/var/mqm/exits64/db2swit(此命令还将重命名文件,以在安装到exits64时删除64)。
如果 DB2 未安装在缺省位置,必须从 MQ 中提供的源代码构建交换加载文件:
- 作为 root 登录。
- 如果 DB2 未安装在缺省位置,则导出
DB2_HOME=/<alternate location>/sqllib。 - 转到目录
/usr/mqm/samp/xatm。 - 发出以下命令,以构建库并将它们安装在
db2swit和db2swit64目录中:make -f xaswit.mak db2swit
步骤 4. 为数据库配置 ODBC .ini 文件(32 位和 64 位)
由于 Message Broker 是 32 位进程,而 MQ Queue Manager 是 64 位进程,因此必须同时在 ODBC .ini 文件中提供 32 位 和 64 位数据源驱动程序信息。在选择的位置(如代理服务用户主目录)创建 ODBC .ini 文件。通过这样,可让系统上的每个代理服务用户 ID 使用自己的数据源定义。
第一步是使用 /var/mqsi/odbc/.odbc.ini 处的模板创建并编辑 32 位 ODBC .ini 文件。Message Broker 数据库别名必须包括在此文件中。在下面的示例中,数据库 WBRKBDB 采用了用于 TCP 连接的别名 WBRKBDBT。该示例还给出了采用 ODBC 进行访问的数据库,该数据库的 ODBC 数据源名称(Data Source Name,DSN)为 ODBCDB,对于 TCP 连接的别名为 ODBCDBT:
[ODBC Data Sources] WBRKBDBT=IBM DB2 ODBC Driver ODBCDBT=IBM DB2 ODBC Driver [WBRKBDBT] Driver=/usr/opt/db2_08_01/lib/libdb2.a Description=WBRKBDB Database alias Database=WBRKBDBT [ODBCDBT] Driver=/usr/opt/db2_08_01/lib/libdb2.a Description=ODBCDB Database alias Database=ODBCDBT [ODBC] Trace=0 TraceFile=/var/mqsi/odbc/odbctrace.out TraceDll=/opt/IBM/mqsi/6.0/merant/lib/odbctrac.so InstallDir=/opt/IBM/mqsi/6.0/merant UseCursorLib=0 IANAAppCodePage=4
接下来,创建 64 位 ODBC .ini 文件:.odbc64.ini(如果尚不存在),其创建方法如 Message Broker 信息中心中 odbc64.ini 示例文件中所示。Message Broker 数据库别名必须包括在此文件中。在下面的示例中,数据库 WBRKBDB 采用了用于 TCP 连接的别名 WBRKBDBT。该示例还给出了采用 ODBC 进行访问的数据库,该数据库的 ODBC DSN 为 ODBCDB,对于 TCP 连接的别名为 ODBCDBT。
- 如果有必要,复制
/var/mqsi/odbc/.odbc.ini并对其重命名,从而创建名为.odbc64.ini的文件。 - 编辑
.odbc64.ini以更改 64 位库 (libdb2Wrapper64.so) 的驱动程序,并按照下面所示替换[ODBC]内容:
[ODBC Data Sources] WBRKBDBT=IBM DB2 ODBC Driver ODBCDBT=IBM DB2 ODBC Driver [WBRKBDBT] Driver=libdb2Wrapper64.so Description=WBRKBDB Database alias Database=WBRKBDBT [ODBCDBT] Driver=libdb2Wrapper64.so Description=ODBCDB Database alias Database=ODBCDBT [ODBC] Trace=0 TraceFile=/var/mqsi/odbc/odbctrace.out TraceDll=/opt/IBM/mqsi/6.0/DD64/lib/odbctrac.so InstallDir=/opt/IBM/mqsi/6.0/DD64 UseCursorLib=0 IANAAppCodePage=4 UNICODE=UTF-8 - 最后,确保 ODBC
.ini文件具有正确的所有关系和权限。作为 root 对文件执行以下命令:
chown mqm:mqbrkrs .odbc.ini .odbc64.ini
chmod 664 .odbc.ini .odbc64.ini
|
对于所使用的任何控制台会话,请确保设置了以下环境变量:
$ODBCINI指向在前一步骤中创建的.odbc.ini文件:export ODBCINI64=/<path>/.odbc64.ini$ODBCINI64指向在前一步骤中创建的.odbc64.ini文件:export ODBCINI64=/<path>/.odbc64.iniMQSI_LIBPATH64包括常规 64 位 DB2 数据库的库。假定实例名/所有者为db2inst1,则导出命令将与以下所示类似:export MQSI_LIBPATH64=/db2data/db2inst1/sqllib/lib64:$LD_LIBRARY_PATH.
不要直接更改产品 mqsiprofile 环境设置脚本,因为如果应用维护,可能会将其重写。不过,如果将名为 *.sh 的任意文件放入该位置中,mqsiprofile 可以为您调用任何其他用户编写的脚本。 <Workpath>/common/profiles
其中 <Workpath> 通过环境变量 MQSI_WORKPATH 定义。此步骤仅在使用 64 位执行组时是必需的,但最好是在稍后添加 64 位执行组的情况下完成配置。
步骤 6. 配置 Message Broker 队列管理器,从而为 DB2 JDBC 使用 XA
需要告知 WebSphere MQ 其将通过 Transaction Processor 进行协作的数据库的情况。可以通过为定义资源类型的数据库配置 XA 资源配置记录来完成此工作,例如,通过使用之前为支持通信而准备的交换加载文件。
这些指令用于 DB2,且假定 WebSphere MQ 和 WebSphere Message Broker 安装在缺省位置。数据库名称显示为 <jdbc database TCP alias name>,需要替换为用户 ID 和密码,以与您环境中的设置匹配。每个定义的 XA 资源都必须具有唯一的数据库名称,此名称需与相关代码建立到数据源的连接时使用的名称匹配:
- 停止 Broker 和任何访问 Broker 的队列管理器的应用程序。
- 停止 Broker 的对象管理器。
- 编辑以下文件:
/var/mqm/qmgrs/<queue manager name>/qm.ini - 将以下代码片段添加到 DB2 JDBC App Type 2 XA 对应的文件中:
XAResourceManager: Name=<jdbc database TCP alias name> SwitchFile=db2swit XAOpenString=db=<database name>,uid=<userid>,pwd=<password>,toc=t ThreadOfControl=THREAD - 重新启动 Broker 的队列管理器。
- 检查以下位置的错误:
/var/mqm/qmgrs/<queue manager name>/errors。 - 检查以下位置的错误:
/var/mqm/errors。 - 检查系统日志中的错误:
/var/adm/syslog/user.log。(如果日志不位于此位置,则请查看/etc/syslog.conf底部,以找到其写入位置。) - 由于 XA 所进行的实际测试在队列管理器上正常工作,因此可以在上面交换文件之一的
XAOpenString中使用错误密码,并进行检查,会发现在尝试进行重新启动时在队列管理器日志中出现了错误。请记得稍后对此进行更正。
在启动 Message Broker 前及运行 db2profile 后,必须完成这些步骤,以便 Broker 能找到 DB2 必需的 32 位库文件。这些步骤假定实例名称/所有者为 db2inst1:
export LD_LIBRARY_PATH=/db2data/db2inst1/sqllib/lib32:$LD_LIBRARY_PATH |