Si è verificato un errore durante il recupero del database. Non è stato possibile connettersi a MSDTC per controllare lo stato di completamento della transazione.

Microsoft.SQLServer.2012.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 usa 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. MS DTC 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 MS DTC con le informazioni per procedere.

Per altre informazioni sugli errori 3437, 3437 e "Non è stato possibile connettersi a DTC" all'avvio di SQL Server, vedere l'articolo 306366 della Microsoft Knowledge Base.

Soluzioni

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

Per usare la console di amministrazione di MS DTC, eseguire la procedura seguente:

. 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, Interrompi o Ignora. Scegliere l'opzione appropriata.

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Abilitato

Abilita o disabilita il flusso di lavoro.

Priorità

Definisce la priorità dell'avviso.

1

Gravità

Definisce la gravità dell'avviso.

1

Element properties:

TargetMicrosoft.SQLServer.2012.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID3437
Event Source$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
Si è verificato un errore durante il recupero del database. Non è stato possibile connettersi a MSDTC per controllare lo stato di completamento della transazione.
{0}
Event LogApplication
CommentMom2012ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2012GroupID={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.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>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>