【问题标题】:MSDTC fails intermittentlyMSDTC 间歇性失败
【发布时间】:2011-12-02 05:33:49
【问题描述】:

我有一个运行 MSDTC 的 Windows 2003 服务器。我已将其设置为无身份验证模式,并允许入站出站设置。我的 MSDTC 有效,但当天的第一笔交易失败。在立即进行另一笔交易时,它将开始工作。

错误是:事务已经隐式或显式提交或 中止(HRESULT 异常:0x8004D00E)。

所以我开始了 MSDTC 跟踪,在跟踪文件中显示:

pid=2144;tid=2528;time=12/02/2011-10:49:39.140;seq=531;eventid=TRACING_STARTED;;"MSDTC 正在恢复长期事务的跟踪"

pid=2144;tid=2528;time=12/02/2011-10:49:39.140;seq=532; eventid=TRANSACTION_BEGUN; tx_guid=4df1b0cf-26a0-43ba-8f41-965d80f92441;"交易开始,描述:''"

pid=2144;tid=3288;time=12/02/2011-10:49:39.140;seq=533 ; eventid=RM_ENLISTED_IN_TRANSACTION; tx_guid=4df1b0cf-26a0-43ba-8f41-965d80f92441 ;"资源管理器 #1002 作为事务登记 #1 登记。RM guid = '4e45a393-b02a-42bf-8f66-62bcb17fee8e'"

pid=2144;tid=4164;time=12/02/2011-0:49:58.390;seq=534; eventid=TRANSACTION_PROPOGATION_FAILED_CONNECTION_DOWN_FROM_REMOTE_TM ;tx_guid=4df1b0cf-26a0-43ba-8f41-965d80f92441 ;"由于与远程事务管理器的连接中断,无法将事务传播到子节点 'DBSERVER'"

pid=2144;tid=4164;time=12/02/2011-10:49:58.390;seq=535; eventid=TRANSACTION_ABORTING;tx_guid=4df1b0cf-26a0-43ba-8f41-965d80f92441;"事务正在中止"

pid=2144;tid=4164;time=12/02/2011-10:49:58.390;seq=536; eventid=RM_ISSUED_ABORT;tx_guid=4df1b0cf-26a0-43ba-8f41-965d80f92441 ;"为事务登记 #1 向资源管理器 #1002 发出中止请求"

pid=2144;tid=2528;time=12/02/2011-10:49:58.422;seq=537; eventid=RM_ACKNOWLEDGED_ABORT;tx_guid=4df1b0cf-26a0-43ba-8f41-965d80f92441;"收到来自资源管理器 #1002 的事务登记 #1 的中止请求的确认"

pid=2144;tid=2528;time=12/02/2011-10:49:58.422;seq=538; eventid=TRANSACTION_ABORTED;tx_guid=4df1b0cf-26a0-43ba-8f41-965d80f92441 ;“交易已中止”

pid=2144;tid=3640;time=12/02/2011-10:50:29.437;seq=539;eventid=TRACING_STOPPED;;"由于缺乏活动,MSDTC 正在暂停对长期事务的跟踪"

我从这里应用了 Davy Brion 的 hack,http://davybrion.com/blog/2010/03/msdtc-woes-with-nservicebus-and-nhibernate/

还在事务选项中将超时间隔设置为 10 分钟。

如果服务器再次保持空闲一段时间,事务将失败。

提前谢谢..

【问题讨论】:

  • 您看过这篇知识库文章:support.microsoft.com/kb/922430。这似乎与您的问题非常相似。看起来您有 2 个服务器:一个应用程序服务器和一个 DBServer?两台服务器上的 DTC 设置是否相同?服务器之间有防火墙吗?如果您确实有防火墙,它有时可以帮助跟踪防火墙中的活动。
  • 谢谢 Tuzo,我的服务器在 LAN 中,它们没有防火墙,虽然一个在工作组中,另一个在域中。现在我已经将它们都转移到了域中。没见过这篇文章。根据文章,我已经更改了服务器上的注册表。如果它是固定的,我会发布状态。谢谢
  • 谢谢图佐。这是同样的问题。你的 kb 文章帮助了我。我的问题已经解决了。

标签: transactionscope msdtc


【解决方案1】:

这是帮助的知识库文章:922430

如果 MS DTC 事务跟踪日志文件包含此数据,请执行以下步骤:

Click Start, click Run, type regedit, and then click OK.
Locate the following registry subkey:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC
Right-click MSDTC, point to New, and then click DWORD Value.
Type CmMaxNumberBindRetries, and then press ENTER.
Right-click CmMaxNumberBindRetries, and then click Modify.
Click Decimal.
In the Value data box, type 60. 

此值增加客户端计算机等待来自服务器计算机的绑定数据包响应的时间长度。如果客户端计算机未收到绑定数据包响应,则此值是客户端计算机停止事务之前的秒数的两倍。例如,值 60 等于 30 秒。

注意 60 只是推荐值。可能需要对您的配置进行额外测试。 单击确定。 重新启动 MS DTC。 注意 对于慢速响应方案,请确保在外围网络中涉及防火墙时,Kerberos 身份验证所需的端口(UDP 88 和 TCP 88)处于打开状态。端口 UDP 389 和 TCP 389(都用于 LDAP 查找 KDC)也必须打开。

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2011-10-21
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多