MSSQL per Windows: 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.Windows.EventRule.DBEngine.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule (Rule)

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:

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.

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.

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Abilitato

Abilita o disabilita il flusso di lavoro.

Intervallo (secondi)

Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro.

300

Priorità

Definisce la priorità dell'avviso.

1

Gravità

Definisce la gravità dell'avviso.

1

Ora di sincronizzazione

Ora di sincronizzazione

 

Timeout (secondi)

Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito.

200

Timeout per la connessione di database (secondi)

Il flusso di lavoro avrà esito negativo e registrerà un evento se non riesce ad accedere al database durante il periodo specificato.

15

Element properties:

TargetMicrosoft.SQLServer.Windows.DBEngine
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL per Windows: Si è verificato un errore durante il recupero del database. Non è stato possibile connettersi a MSDTC per controllare lo stato di completamento della transazione
{0}
CommentMom2017ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

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

Source Code:

<Rule ID="Microsoft.SQLServer.Windows.EventRule.DBEngine.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2017ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered">
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<EventDisplayNumber>3437</EventDisplayNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Windows.EventRule.DBEngine.Error_recovering_database_._Could_not_connect_to_MSDTC_to_check_the_completion_status_of_transaction_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>Event ID: $Data/Property[@Name='EventID']$. $Data/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>