当尝试登记新的或现有的 Microsoft 分布式事务处理协调器(MS DTC)事务,并且该尝试失败时,出现此消息。
登记失败的原因各种各样。错误状态、随错误返回的具体结果代码以及大约同时发生的任何其他错误都可以帮助确定在您的环境中登记失败的原因。登记失败通常表示存在通信问题,如名称解析失败。该问题也可能是调用应用程序的编码方式或 SQL Server 端的阻塞或性能问题导致的。
检查 MS DTC 事务中涉及的两台计算机是否都已启动 MS DTC。如果 MS DTC 服务属于群集,则在群集管理器中验证该服务是否已联机。
在事件日志中查看 MS DTC 事务中涉及的服务器,以查看生成此消息的同时是否还有其他错误。如果有其他错误,则首先解决这些错误,因为此错误通常是其他错误的副产品。
默认情况下,在 Windows Server 2003 上禁用网络 MS DTC 访问。如果涉及的任何计算机正在运行 Windows 2003,则验证是否启用了 MS DTC。有关如何在 Windows 2003 中启用网络 MS DTC 访问的详细信息,请参阅 Microsoft 知识库文章 817064
验证涉及的服务器之间的 RPC 通信是否工作正常。
重新启动 MS DTC 事务中涉及的服务器以刷新所有的 IP 地址信息。
验证调用 COM+ 组件的事务超时设置的时间足够长,以避免出现超时而导致另一组件尝试登录已超时的事务。
如果已启用 SQL Server 配置选项“轻型池”(也称为“纤程模式”),则关闭它。测试该错误是否仍然出现。
如果已启用 SQL Server 配置选项“优先级提升”,则关闭它。测试该错误是否仍然出现。
查阅 Microsoft 知识库文章 307802,以了解您的环境是否完全符合项目中的环境。如果完全符合,则试着更改其中一个环境因素,看看该消息是否会停止出现。如果一旦环境不再符合项目,该消息就停止出现,那么您可以安全地忽略该消息。
Target | Microsoft.SQLServer.2005.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 8510 | ||
Event Source | $Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$ | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application | ||
Comment | Mom2005ID='{7F714A4C-B7CF-4665-B1B5-4D7A3E0613D0}';MOM2005GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74} |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ | DataSource | Microsoft.Windows.EventProvider | Microsoft.SQLServer.SQLDefaultAccount |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SQLServer.2005.Enlist_of_MSDTC_transaction_failed_1_5_Rule" Target="SQL2005Core!Microsoft.SQLServer.2005.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2005ID='{7F714A4C-B7CF-4665-B1B5-4D7A3E0613D0}';MOM2005GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Windows!Microsoft.Windows.EventProvider" RunAs="SQL!Microsoft.SQLServer.SQLDefaultAccount">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>8510</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2005.Enlist_of_MSDTC_transaction_failed_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>