TransactionScope不适用于DB2提供程序

时间:2009-09-10 08:00:46

标签: db2 transactionscope drivers

我一直在尝试将 TransactionScope DB2 数据库一起使用(使用 DB2 .Net 提供程序v 9.0.0.2和c#2.0)应该根据IBM支持。

我已经尝试过在IBM论坛上找到的所有建议(例如here)无效。

我在我的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。对LOADLIBRARY的调用   用于XA资源管理器DLL   失败:   DLL = C:\ APPS \ IBM \ DB2v95fp2 \ SQLLIB \ BIN \ DB2APP.DLL   文件= 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,         交易互联网协议(TIP)= 0,         XA Transactions = 1

非常感谢任何帮助!

谢谢, 林

2 个答案:

答案 0 :(得分:5)

我设法在TransactionScope中使用了蹩脚的旧IBM DB2 v7 ODBC驱动程序。它要求:

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

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

答案 1 :(得分:2)

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

  1. 运行 dcomcnfg ;
  2. 组件服务>电脑>我的电脑>分布式事务协调器
  3. 选择本地DTC>属性>安全标签:
  4. MS DTC Configuration for DB2 and Informix

    重新启动计算机,然后重试。确保您拥有最新的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