MSSQLSERVER_7391
Se aplica a: SQL Server
Attribute | Valor |
---|---|
Producto | SQL Server |
Id. de evento | 7391 |
Origen de eventos | MSSQLSERVER |
Componente | SQLEngine |
Nombre simbólico | RMT_TRANS_JOIN_FAIL |
Texto del mensaje | No se pudo realizar la operación porque el proveedor OLE DB "%ls" para el servidor vinculado "%ls" no pudo iniciar una transacción distribuida. |
Explicación
Este error se produce porque el servicio Coordinador de transacciones distribuidas (MSDTC) de Microsoft no se está ejecutando o ha deshabilitado el acceso a la red.
En algunos casos, también puede recibir el error 8522:
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
Los números de error que están en el intervalo de 7300 a 7399 indican un problema que afecta al proveedor. Dado que cada proveedor puede tener diferentes funcionalidades y mostrar detalles diferentes, es posible que no reciba un mensaje de error completo. Para recuperar el mensaje de error completo de los proveedores, ejecute el siguiente comando antes de ejecutar la consulta que genera el error:
DBCC TRACEON (3604, 7300)
Si recibe el error 7391 de un proceso como la replicación de SQL Server o SQL Server Integration Services (SSIS), también puede recibir el mensaje de error si el código contiene una BEGIN DISTRIBUTED TRAN
instrucción .
Acción del usuario
Nota:
Es un procedimiento recomendado limitar el código en una transacción que implica una consulta distribuida que se realiza solo en el servidor remoto.
Compatibilidad
Para comprobar si el controlador admite transacciones distribuidas, póngase en contacto con el proveedor del controlador que usa en la consulta del servidor vinculado.
Compruebe si el objeto del servidor de destino vuelve a apuntar al primer servidor. Esto se conoce como una situación de bucle invertido. Los servidores vinculados de bucle invertido están diseñados para pruebas y no se admiten para muchas operaciones, como transacciones distribuidas.
Comunicación del servidor
Para asegurarse de que la comunicación entre servidores es correcta, siga estos pasos:
Compruebe si la resolución de nombres de red funciona. Asegúrese de que los servidores pueden comunicarse entre sí por nombre y no solo por dirección IP. Compruebe ambas direcciones (por ejemplo, del servidor A al servidor B y del servidor B al servidor A). Resuelva todos los problemas de resolución de nombres en la red antes de ejecutar la consulta distribuida. Esto puede implicar la actualización de los archivos WINS, DNS o LMHost.
Si tiene un firewall, asegúrese de que los puertos de llamada a procedimiento remoto (RPC) están abiertos correctamente. Vea los siguientes artículos para más información:
Compruebe el objeto al que apunta en el servidor de destino. Si el objeto es una vista o un procedimiento almacenado, o si hace que se ejecute un desencadenador, compruebe si apunta implícitamente a otro servidor. Si es así, el tercer servidor es el origen del problema. Ejecute la consulta directamente en el tercer servidor. Si no puede hacerlo, la consulta del servidor vinculado no es el problema. Resuelva primero el problema subyacente.
Compruebe si usa el servidor de acceso remoto (RAS) para acceder a los servidores remotos. Si es así, asegúrese de que ha implementado ras de enrutamiento (RRAS). Los servidores vinculados no funcionan en RAS porque RAS solo permite la comunicación unidireccional.
Configuración del servidor
Siga estos pasos para configurar los servidores:
Inicie el Coordinador de transacciones distribuidas (DTC o MS DTC) en todos los servidores implicados en la transacción distribuida. Para obtener información sobre cómo habilitar el acceso de DTC de red, vea Mensaje de error del proveedor OLE DB - SQL Server.
Establezca la opción XACT_ABORT en ON para las instrucciones de modificación de datos en una transacción implícita o explícita en la mayoría de los proveedores OLE DB, incluido SQL Server. Para ello, ejecute el siguiente comando antes de ejecutar la consulta.
SET XACT_ABORT ON
Nota:
Esta opción no es necesaria si el proveedor admite transacciones anidadas.
Compruebe si alguno de los servidores está en un clúster de conmutación por error de Windows Server. El servicio MSDTC del clúster debe tener su propia dirección IP. Asegúrese de que la resolución de nombres correcta del servicio DTC se produce en cada servidor. La dirección IP del DTC debe definirse en el sistema de resolución de nombres (como WINS, DNS o LMHosts). Compruebe que cada servidor puede comunicarse con MSDTC en los demás servidores por nombre y no solo por dirección IP. Compruebe ambas direcciones. Por ejemplo, compruebe del servidor A al servicio MSDTC del servidor B y, a continuación, compruebe del servidor B al MSDTC del servidor A. Debe resolver todos los problemas de resolución de nombres en la red antes de ejecutar la consulta distribuida. Para configurar MSDTC en un clúster, consulte Recomendaciones de MSDTC sobre el clúster de conmutación por error de SQL: Centro de comunidad de Microsoft.
Si usa la tecnología de servidores remotos más antiguos en lugar de los servidores vinculados recomendados, establezca la opción
OFF
de configuración de trans proc remoto en para el servidor o ejecute unaSET REMOTE_PROC_TRANSACTIONS OFF
instrucción antes de ejecutar cualquier consulta distribuida. Si esta configuración se estableceON
en , las llamadas a procedimientos remotos se realizan en una transacción local. Para obtener más información, consulte Configuración del procedimiento remoto trans (opción de configuración de servidor) - SQL Server.Compruebe el valor devuelto de la función
@@SERVERNAME
del sistema en ambos servidores. Compruebe si el valor devuelto coincide con el nombre de equipo de cada servidor. Si no coincide, cambie el nombre del servidor.Compruebe que la cuenta de inicio de SQL Server tiene permisos de control total en la siguiente clave del Registro:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer