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 transaction timed out based on the application's time-out settings.
Another resource manager participating in the transaction may have requested the ABORT.
MSDTC may have been shut down during the transaction.
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.
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.
For more information about MSDTC, see "MSDTC Service," "Distributed Transactions," "Distributed Transactions Architecture," "Configuring Linked Servers," and "How Immediate Updating Works" in Books Online.
Target | Microsoft.SQLServer.2000.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
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='{EF58ECE0-B046-4CCE-9C05-67B84BD09615}' |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
EventDS | DataSource | Microsoft.Windows.EventProvider | Default |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<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>