Commit of internal MSDTC transaction failed.

Microsoft.SQLServer.2000.Commit_of_internal_MSDTC_transaction_failed (Rule)

Knowledge Base article:

Causes

Microsoft Distributed Transaction Coordinator (MSDTC) can ask transaction participants, such as COM+ components or one or more SQL Server instances, to PREPARE as part of the two-phase commit (2PC) protocol. If SQL Server responds that it is ready to COMMIT, but MSDTCs ask for an ABORT for any of a number of reasons, this error appears on the server that issued the COMMIT. Similary, if SQL Server initiated the transaction request and it asked another participant to PREPARE, but in the meantime any of the participants requested an ABORT, the server that initiated the request will report this error.

Examples of reasons why the ABORT might be requested are:

The exact result code returned as part of the message varies, and a search on the result code may provide more details about the root cause.

Resolutions

This message is an indication of normal two-phase commit activity. If you are not sure which application or SQL Server query is calling MSDTC, you can use a SQL Profiler trace to capture which command was aborted.

External

For more information about MSDTC, see "MSDTC Service," "Distributed Transactions," "Distributed Transactions Architecture," "Configuring Linked Servers," and "How Immediate Updating Works" in Books Online.

Element properties:

TargetMicrosoft.SQLServer.2000.DBEngine
CategoryEventCollection
EnabledTrue
Event Source$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
Commit of internal MSDTC transaction failed.
{0}
Event LogApplication
CommentMom2005ID='{EF58ECE0-B046-4CCE-9C05-67B84BD09615}'

Member Modules:

ID Module Type TypeId RunAs 
EventDS DataSource Microsoft.Windows.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.2000.Commit_of_internal_MSDTC_transaction_failed" Target="SQL2000Core!Microsoft.SQLServer.2000.DBEngine" Enabled="true" Comment="Mom2005ID='{EF58ECE0-B046-4CCE-9C05-67B84BD09615}'" Remotable="true">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="EventDS" TypeID="Windows!Microsoft.Windows.EventProvider">
<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>
<RegExExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>MatchesMOM2005RegularExpression</Operator>
<Pattern>^(17052|17055)$</Pattern>
</RegExExpression>
</Expression>
<Expression>
<RegExExpression>
<ValueExpression>
<XPathQuery>EventDescription</XPathQuery>
</ValueExpression>
<Operator>MatchesMOM2005BooleanRegularExpression</Operator>
<Pattern>((^.*8520 and (not ^.*\n.*8520)) or (^.*8520.*\n.*8520)) AND (NOT ^.*[0-9]+.*8520) AND (NOT ^.*8520[0-9]+)</Pattern>
</RegExExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertOwner>$Data/PublisherName$</AlertOwner>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2000.Commit_of_internal_MSDTC_transaction_failed.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>