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:
errori di rete
arresto di MSSQLSERVER o MS DTC
arresto di altri servizi correlati
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.
Esistono diversi metodi per risolvere le transazioni distribuite lasciate in uno stato incoerente.
È possibile utilizzare il metodo descritto nell'argomento sulla risoluzione dei problemi relativi alle transazioni MSDTC della documentazione online di SQL Server.
Se si arresta MS DTC in uno o più server coinvolti in una o più transazioni distribuite, il problema potrebbe essere risolto semplicemente riavviando MS DTC.
È spesso possibile utilizzare la console di amministrazione di MSDTC.
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.
Nome | Descrizione | Valore predefinito |
Abilitato | Abilita o disabilita il flusso di lavoro. | Sì |
Priorità | Definisce la priorità dell'avviso. | 1 |
Gravità | Definisce la gravità dell'avviso. | 1 |
Target | Microsoft.SQLServer.2008.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 | Mom2008ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2008GroupID={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.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>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>