Wenn Sie MS DTC zum Verwalten einer verteilten Transaktion über mehrere Server verwenden und es dabei zu einer Verbindungsunterbrechung kommt, ist der Status der verteilten Transaktion anschließend unbekannt oder zweifelhaft. Zu den häufig auftretenden Ursachen für Unterbrechungen gehören Folgende:
Netzwerkfehler
Beenden von MSSQLSERVER oder MS DTC
Beenden anderer beteiligter Dienste
auf einem oder mehreren Computern, die an der verteilten Transaktion beteiligt sind. Wenn die Verbindung unterbrochen wurde, hinterlässt MS DTC alle Transaktionen, die zu diesem Zeitpunkt durchgeführt werden, in einem inkonsistenten Status. Die als zweifelhaft gekennzeichneten Transaktionen verursachen diese Symptome, da SQL Server nicht ermitteln kann, ob für die Transaktionen ein Commit oder ein Rollback ausgeführt werden soll, und MS DTC muss SQL Server mitteilen, wie zu verfahren ist.
Weitere Informationen zu den Fehlern 3437 und 3437 und der Meldung "Es konnte keine Verbindung mit MS DTC hergestellt werden..." beim Starten von SQL Server finden Sie im Microsoft Knowledge Base-Artikel 306366.
Zum Auflösen inkonsistenter verteilter Transaktionen gibt es mehrere unterschiedliche Verfahren:
Sie können die Methode verwenden, die im Thema zur Fehlerbehandlung von MS DTC-Transaktionen in der SQL Server-Onlinedokumentation beschrieben ist.
Wenn Sie MS DTC auf einem oder mehreren an der verteilten Transaktion (bzw. den Transaktionen) beteiligten Servern anhalten, wird das Problem möglicherweise beim Neustart von MS DTC behoben.
In vielen Fällen kann die MS DTC-Verwaltungskonsole verwendet werden.
So verwenden Sie die MS DTC-Verwaltungskonsole:
. Geben Sie mmc.exe im Dialogfeld "Ausführen" ein, um Microsoft Management Console (MMC) zu öffnen.
. Klicken Sie im MMC-Konsolenmenü auf "Snap-In hinzufügen/entfernen".
. Klicken Sie im Dialogfeld "Snap-In hinzufügen/entfernen" auf "Hinzufügen".
. Klicken Sie im Dialogfeld "Eigenständiges Snap-In hinzufügen" auf "Komponentendienste", und klicken Sie auf "Hinzufügen", um das Snap-In hinzuzufügen.
. Klicken auf 'Schließen'
. Klicken Sie im Dialogfeld "Snap-In hinzufügen/entfernen" auf "OK".
. Erweitern Sie im Konsolenstamm unter "Komponentendienste" den Eintrag "Komponentendienste", zeigen Sie auf "Computer" und dann auf "Arbeitsplatz", und klicken Sie anschließend auf "Distributed Transaction Coordinator".
. Wählen Sie "Transaktionsliste" aus. Im Detailfenster werden Transaktionen angezeigt. Klicken Sie mit der rechten Maustaste auf die Transaktion, und klicken Sie dann auf "Auflösen". Sie können nun zwischen drei Optionen auswählen: "Commit", "Abbrechen" oder "Verwerfen". Wählen Sie die Option, die für Ihre Situation geeignet ist.
Target | Microsoft.SQLServer.2012.DBEngine | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 3437 | ||
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 | Mom2012ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2012GroupID={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.2012.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule" Target="SQL2012Core!Microsoft.SQLServer.2012.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2012ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2012GroupID={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>3437</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.2012.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>