Errore durante il recupero del database. Impossibile connettersi a MSDTC per controllare lo stato di completamento della transazione

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

Knowledge Base article:

Riepilogo

Se si verifica una perdita di connettività mentre si utilizza MSDTC per gestire una transazione distribuita in più server, la transazione distribuita viene lasciata in uno stato sconosciuto o "in dubbio". Tali interruzioni sono generalmente dovute alle cause seguenti:

in uno o più computer coinvolti nella transazione distribuita. MSDTC lascia in uno stato incoerente tutte le transazioni in corso al momento dell'interruzione della connessione. Le transazioni "in dubbio" causano questi sintomi in quanto SQL Server non è in grado di determinare se eseguire il commit o il rollback delle transazioni e necessita quindi di MSDTC per procedere.

Per ulteriori informazioni sugli errori 3437, 3414 e "Impossibile connettersi a DTC" all'avvio di SQL Server, vedere l'articolo della Microsoft Knowledge Base 306366.

Soluzioni

Esistono diversi metodi per risolvere le transazioni distribuite lasciate in uno stato incoerente.

Per utilizzare la console di amministrazione di MSDTC:

. Digitare "mmc.exe" (senza le virgolette) nella finestra di dialogo Esegui per aprire Microsoft Management Console (MMC).

. In MMC scegliere Aggiungi/Rimuovi snap-in dal menu della console.

. Nella finestra di dialogo Aggiungi/Rimuovi snap-in fare clic su Aggiungi.

. Nella finestra di dialogo Aggiungi snap-in autonomo fare clic su Servizi componenti, quindi su Aggiungi per aggiungere lo snap-in.

. Fare clic su Chiudi

. Nella finestra di dialogo Aggiungi/Rimuovi snap-in fare clic su OK.

. Nella radice console in Servizi componenti espandere Servizi componenti, selezionare Computer, Risorse del computer e infine scegliere Distributed Transaction Coordinator.

. Selezionare Elenco transazioni. Le transazioni verranno visualizzate nel riquadro dei dettagli. Fare clic con il pulsante destro del mouse sulla transazione, quindi scegliere Risolvi. Sono disponibili tre opzioni, ovvero Commit, Abbandona o Ignora. Scegliere l'opzione appropriata.

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID3437
Event Source$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
Errore durante il recupero del database. Impossibile connettersi a MSDTC per controllare lo stato di completamento della transazione
{0}
Event LogApplication
CommentMom2008ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2008GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

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

Source Code:

<Rule ID="Microsoft.SQLServer.2008.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2008ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2008GroupID={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.2008.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>