Lorsque vous utilisez MS DTC pour gérer une transaction distribuée sur plusieurs serveurs et qu'une perte de connectivité se produit, la transaction distribuée est laissée dans un état inconnu ou incertain. Les sources d'interruptions courantes
Erreurs réseau
Arrêt de MSSQLSERVER ou MS DTC
Arrêt d'autres services impliqués
se situent sur un ou plusieurs ordinateurs participant à la transaction distribuée. Suite à l'interruption de la connexion, MS DTC laisse toutes les transactions en cours dans un état incohérent. Les transactions incertaines entraînent ces symptômes car SQL Server ne peut déterminer s'il faut valider ou annuler les transactions, et il a besoin que MS DTC lui indique comment procéder.
Pour plus d'informations sur les erreurs 3437 et l'impossibilité de se connecter à DTC lors du démarrage de SQL Server, consultez l'article 306366 de la Base de connaissances Microsoft.
Différentes méthodes permettent de résoudre les transactions distribuées incohérentes :
Vous pouvez utiliser la méthode de dépannage des transactions MS DTC décrite dans la documentation en ligne de SQL Server
Si vous arrêtez MS DTC sur un ou plusieurs serveurs impliqués dans les transactions distribuées, vous pouvez résoudre le problème lors du redémarrage de MS DTC.
Vous pouvez souvent utiliser la console d'administration MS DTC.
Pour utiliser la console d'administration MS DTC :
. Tapez « mmc.exe » (sans guillemets) dans la boîte de dialogue Exécuter pour ouvrir la console MMC (Microsoft Management Console).
. Dans MMC, dans le menu Console, cliquez sur Ajouter/Supprimer un composant logiciel enfichable
. Dans la boîte de dialogue Ajouter/Supprimer un composant logiciel enfichable, cliquez sur Ajouter
. Dans la boîte de dialogue Ajout d'un composant logiciel enfichable autonome, cliquez sur Services de composants, puis sur Ajouter.
. Cliquez sur Fermer
. Dans la boîte de dialogue Ajouter/Supprimer un composant logiciel enfichable, cliquez sur OK
. Développez Services de composants dans la racine de la console, pointez sur Ordinateurs, pointez sur Poste de travail, puis cliquez sur Coordinateur de transactions distribuées
. Sélectionnez Liste de transactions. Les transactions apparaissent dans le volet d'informations. Cliquez avec le bouton droit sur la transaction, puis cliquez sur Résoudre. Vous avez à présent trois options : Valider, Abandonner ou Oublier. Choisissez celle qui convient à votre situation
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>