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
Errores de red
Detención de MSSQLSERVER o MS DTC
Detención de otros servicios implicados
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, consulte el artículo de Microsoft Knowledge Base 306366.
Se pueden usar varios métodos para resolver las transacciones distribuidas incoherentes:
Puede usar el método descrito en el apartado sobre solución de problemas con transacciones de MS DTC de los Libros en pantalla de SQL Server.
Si detiene MS DTC en uno o más de los servidores implicados en la transacción o en las transacciones distribuidas, es posible que se solucione el problema cuando reinicie MS DTC.
Con frecuencia, se puede usar la consola administrativa MS DTC:
Haga lo siguiente 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.
Nombre | Descripción | Valor predeterminado |
Habilitado | Habilita o deshabilita el flujo de trabajo. | Sí |
Prioridad | Define la prioridad de la alerta. | 1 |
Gravedad | Define la gravedad de la alerta. | 1 |
Target | Microsoft.SQLServer.2012.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 | Mom2012ID='{6B1C776D-E075-4F73-B9C0-66CEF9024905}';MOM2012GroupID={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.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>