MSSQL 2016 : Erreur lors de la récupération de la base de données. Impossible de se connecter à MSDTC pour contrôler l'état d'achèvement de la transaction

Microsoft.SQLServer.2016.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule (Rule)

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 comprennent :

Knowledge Base article:

Résumé

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 comprennent :

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.

Solutions

Différentes méthodes permettent de résoudre les transactions distribuées incohérentes :

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

Paramètres remplaçables

Nom

Description

Valeur par défaut

Activé

Active ou désactive le flux de travail.

Oui

Priorité

Définit la priorité de l'alerte.

1

Severité

Définit la gravité de l'alerte.

1

Element properties:

TargetMicrosoft.SQLServer.2016.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID3437
Event Source$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL 2016 : Erreur lors de la récupération de la base de données. Impossible de se connecter à MSDTC pour contrôler l'état d'achèvement de la transaction
{0}
Event LogApplication
CommentMom2016ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2016GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

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

Source Code:

<Rule ID="Microsoft.SQLServer.2016.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule" Target="SQL2016Core!Microsoft.SQLServer.2016.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2016ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2016GroupID={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">
<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="SQL2016Core!Microsoft.SQLServer.2016.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.2016.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>