Error al recuperar la base de datos. No se puede conectar a MSDTC para comprobar el estado de realización de la transacción.

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:

Resumen

Si utiliza MS DTC para administrar una transacción distribuida a través de varios servidores y se produce una pérdida de conectividad, la transacción distribuida se deja en un estado desconocido o "dudoso". Las fuentes comunes de interrupción son:

en uno o más equipos de la transacción distribuida. Después de interrumpir la conexión, MS DTC deja todas las transacciones en curso en esa fase en un estado incoherente. Las transacciones "dudosas" dan lugar a estos síntomas porque SQL Server no puede determinar si confirma o revierte las transacciones y SQL Server necesita que MS DTC le diga cómo proceder.

Para obtener más información acerca de los errores 3437, 3414 y el que informa de que no se puede conectar a DTC al iniciar SQL Server, vea el artículo de Microsoft Knowledge Base 306366.

Soluciones

Se pueden usar varios métodos para resolver las transacciones distribuidas incoherentes:

Para usar la consola administrativa MS DTC:

. Escriba "mmc.exe" (sin las comillas) en el cuadro de diálogo Ejecutar para abrir Microsoft Management Console (MMC).

. En MMC, en el menú Consola, haga clic en Agregar o quitar complemento.

. En el cuadro de diálogo Agregar o quitar complemento, haga clic en Agregar.

. En el cuadro de diálogo Agregar un complemento independiente, haga clic en Servicios de componente y a continuación, haga clic en Agregar para agregar el complemento.

. Haga clic en Cerrar

. En el cuadro de diálogo Agregar o quitar complemento, haga clic en Aceptar.

. En la raíz de consola, bajo Servicios de componente, expanda Servicios de componente, señale Equipos, Mi PC y, a continuación, Coordinador de transacciones distribuidas.

. Elija Lista de transacciones. Verá las transacciones en el panel de detalles. Haga clic con el botón secundario en la transacción y, a continuación, haga clic en Resolver. Ahora dispone de tres opciones: confirmar, anular o rechazar. Elija la que mejor se ajuste a su situación.

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
Error al recuperar la base de datos. No se puede conectar a MSDTC para comprobar el estado de realización de la transacción.
{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>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>