3

我一直在尝试将TransactionScopeDB2数据库(使用DB2 .Net provider v 9.0.0.2 和 c# 2.0)一起使用,IBM 应该支持它。

我已经尝试了所有可以在 IBM 论坛(例如此处)上找到的建议,但均无济于事。

我在我的 XP Sp2 机器上启用了 XA 事务,也在 Win 2003 Server 机器上尝试过,但我一直收到臭名昭著的错误:

ERROR [58005] [IBM][DB2/NT] SQL0998N  Error occurred during

事务或启发式处理。原因代码 = “16”。子代码 = “2-80004005”。SQLSTATE=58005

windows事件日志说:

The XA Transaction Manager attempted to load the XA resource

管理器 DLL。为 XA 资源管理器 DLL 调用 LOADLIBRARY 失败:DLL=C:\APPS\IBM\DB2v95fp2\SQLLIB\BIN\DB2APP.DLL File=d:\comxp_sp2\com\com1x\dtc\dtc\xatm\src\xarmconn .cpp 行=2467。

此外,授予 NETWORK SERVICE 用户对该文件夹和 dll 的完全权限。

这是 MSDTC 启动消息

MS DTC 使用以下设置开始:

安全配置(OFF = 0 和 ON = 1):事务的网络管理 = 0,网络客户端 = 0,使用本机 MSDTC 协议的入站分布式事务 = 0,使用本机 MSDTC 协议的出站分布式事务 = 0,事务 Internet 协议 (TIP) = 0,XA 交易 = 1

任何帮助将非常感激!

谢谢,弗洛林

4

2 回答 2

5

我设法让老旧的 IBM DB2 v7 ODBC 驱动程序在 TransactionScope 中工作。它要求:

  • MSDTC 属性中启用的 XA 事务
  • 在注册表项 HKLM\SOFTWARE\Microsoft\MSDTC\XADLL 下输入的值,名称为“DB2CLI.DLL”,值为“C:\PROGRA~1\IBM\SQLLIB\BIN\DB2CLI.DLL”(8.3 格式的 dll 路径- v9 使用 DB2APP.DLL)
  • 重新启动
  • 在处置 TransactionScope 之前不关闭连接。回想起来似乎很明显。:)

我不确定这是否与您的特定情况有关。IBM 文档将原因代码 16、子代码 2 显示为“MSDTC 无法注册 DB2 连接”。MSDTC 查找 DB2 dll 似乎存在一些问题 - 也许检查上面引用的注册表项?

于 2010-03-26T03:26:00.560 回答
2

我通过激活 MS DTC 解决了这个问题,如下图所示:

  1. 运行dcomcnfg
  2. 组件服务 > 计算机 > 我的电脑 > 分布式事务协调器
  3. 选择本地 DTC > 属性 > 安全选项卡:

DB2 和 Informix 的 MS DTC 配置

重新启动您的机器,然后重试。确保您拥有最新的 IBM 驱动程序。我使用 10.1 Fix Pack 1 和 Informix 11.50 进行了测试。

来源:http: //blogs.msdn.com/b/bill/archive/2006/12/12/using-msdtc-between-vista-clients-and-windows-2000-servers.aspx

于 2012-12-21T20:02:09.030 回答