MSDTC间歇性失败

时间:2011-12-02 05:33:50

标签: transactionscope msdtc

我有一台运行MSDTC的Windows 2003服务器。我已将其设置为无身份验证模式,允许入站 - 出站设置。我的MSDTC可以正常运行,但当天的第一笔交易失败了。在另一笔交易中它将开始工作。

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

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

pid = 2144; tid = 2528;时间= 12/02 / 2011-10:49:39.140; seq = 531; eventid = TRACING_STARTED ;;“MSDTC正在恢复追踪长期交易”

PID = 2144; TID = 2528;时间= 12/02 / 2011-10:49:39.140; SEQ = 532;事件ID = TRANSACTION_BEGUN; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441;“交易开始了,描述:''”

pid = 2144; tid = 3288;时间= 12/02 / 2011-10:49:39.140; seq = 533;事件ID = RM_ENLISTED_IN_TRANSACTION; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441;“资源管理器#1002作为交易登记#1登记.RM guid ='4e45a393-b02a-42bf-8f66-62bcb17fee8e'”

PID = 2144; TID = 4164;时间= 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;时间= 12/02 / 2011-10:49:58.390; SEQ = 535; eventid = TRANSACTION_ABORTING; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441;“交易正在中止”

PID = 2144; TID = 4164;时间= 12/02 / 2011-10:49:58.390; SEQ = 536; eventid = RM_ISSUED_ABORT; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441;“对资源管理器#1002发出中止请求以进行交易登记#1”

PID = 2144; TID = 2528;时间= 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;时间= 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的黑客,http://davybrion.com/blog/2010/03/msdtc-woes-with-nservicebus-and-nhibernate/

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

如果服务器暂时闲置一段时间,则交易将失败。

提前致谢..

1 个答案:

答案 0 :(得分: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)。