When you are using Microsoft Distributed Transaction Coordinator (MSDTC) to manage a distributed transaction across multiple servers and a loss of connectivity occurs, the distributed transaction is left in an unknown or "in doubt" state. Common sources of interruptions are
Network errors
Stopping MSSQLSERVER or MSDTC
Stopping other involved services on one or more computers that are involved in the distributed transaction. After the connection is disrupted, MSDTC leaves all the transactions in progress at that stage in an inconsistent state. The "in doubt" transactions cause these symptoms because SQL Server cannot determine whether to commit or to roll back the transactions, and SQL Server needs MSDTC to tell it how to proceed.
There are several different methods that you can use to resolve the inconsistent distributed transactions:
Windows 2000
You can use the method described in "Troubleshooting MSDTC Transactions" in SQL Server Books Online.
If you stop MSDTC on one or more of the servers that are involved in the distributed transaction (or transactions), you might resolve the problem when you restart MSDTC.
Frequently, you can use the MSDTC administrative console:
Type "mmc.exe" (without the quotation marks) in the Run dialog box to open Microsoft Management Console (MMC).
In MMC, on the Console menu, click Add/Remove Snap-in.
In the Add/Remove Snap-in dialog box, click Add.
In the Add Standalone Snap-in dialog box, click Component Services, and then click Add to add the snap-in.
Click Close.
In the Add/Remove Snap-in dialog box, click OK.
In the console root under Component Services, expand Component Services, point to Computers, point to My Computer, and then click Distributed Transaction Coordinator.
Select Transaction List. You see transactions in the details pane. Right-click the transaction, and then click Resolve. You now have three options: Commit, Abort, or Forget. Choose the one that is appropriate for your situation.
Windows NT
Click Start, click Run, type "dac.exe" (without the quotation marks), and then press enter. The MSDTC Administrative Console opens.
On the Transactions tab, right-click the transaction, and then click Resolve. You now have three options: Commit, Abort, or Forget. Choose the one that is appropriate for your situation.
For more information about errors 3437, 3437, and "Could Not Connect to DTC" when you start SQL Server, see the Microsoft Knowledge Base article 306366.
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='{70204B00-EA63-4D25-914C-C0710834FB91}' |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
EventDS | DataSource | Microsoft.Windows.EventProvider | Default |
GenerateAlert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SQLServer.2000.Error_recovering_database___Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction" Target="SQL2000Core!Microsoft.SQLServer.2000.DBEngine" Enabled="true" Comment="Mom2005ID='{70204B00-EA63-4D25-914C-C0710834FB91}'" 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>((^.*3437 and (not ^.*\n.*3437)) or (^.*3437.*\n.*3437)) AND (NOT ^.*[0-9]+.*3437) AND (NOT ^.*3437[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.Error_recovering_database___Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>