sql-server - transaction - transacciones sql server ejemplos
No se puede comenzar una transacción distribuida (6)
Estoy tratando de ejecutar SQL contra un servidor vinculado, pero obtengo los errores.
BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions
OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
El proveedor ha devuelto dos errores:
Error n. ° 1:
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
HelpFile:
HelpContext: $00000000
SQLState: 01000
NativeError: 7412
Error # 2
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
HelpFile:
HelpContext: $00000000
SQLState: 42000
NativeError: 7391
¿Cómo hago para que Microsoft favorezca la funcionalidad por sobre la seguridad?
O, al menos, ¿cómo puedo obtener dos SQL Severs para hablar entre ellos?
Preguntas relacionadas
- La operación no se pudo realizar porque el proveedor OLE DB "SQLNCLI10" ... (* el nombre del servidor vinculado es
(null)
) - ¿Error de transacción distribuida? ( usando el proveedor de Oracle )
- No se puede enlistar en una transacción distribuida con NHibernate ( usando Hibernate )
- Error al usar transacciones distribuidas en SQL Server 2008 R2 ( SQL Server 2008 R2, sin respuesta )
- Error distribuido de transacción solo a través del código ( causado por la agrupación de conexiones )
- Error al realizar el coordinador de transacciones distribuidas en el servidor vinculado ( SQL Server 2008, sin respuesta )
- ¿Error de transacción distribuida? ( no hay respuesta aceptada, solo la respuesta no ayuda )
- ¿Cómo insertar en la tabla remota usando el servidor vinculado sin transacción? (la respuesta aceptada no se resuelve )
Lo que he hecho es irrelevante, pero lo publicaré de todos modos.
Asegúrese de que el servicio
Distributed Transaction Coordinator
se ejecuta en ambas máquinas:Deshabilite toda la seguridad de MSDTC en ambas máquinas:
Active las opciones aleatorias en el servidor vinculado:
Maldijo y maldijo.
Cosas rotas.
Comprueba que un
SELECT
puede usar el servidor vinculado :SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users .... (763 row(s) affected)
Comprobó que el servidor del cliente puede hacer
ping
al servidor remoto :C:/Documents and Settings/avatar>ping asicmstest.contoso.com Pinging asicmstest.contoso.com [10.0.0.40] with 32 bytes of data: Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.40: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
Comprobó que el servidor remoto puede comunicar, por nombre, al servidor de inicio:
C:/Documents and Settings/avatar>ping asitestserver.contoso.com Pinging asitestserver.contoso.com [10.0.0.22] with 32 bytes of data: Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.22: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
Comprueba que
@@SERVERNAME
coincida con el nombre del servidor en ambos servidores :SELECT @@SERVERNAME, SERVERPROPERTY(''MachineName'') ------------- ------------- ASITESTSERVER ASITESTSERVER
y
SELECT @@SERVERNAME, SERVERPROPERTY(''MachineName'') ---------- ---------- ASIGROBTEST ASIGROBTEST
Gritó
Emitido
SET XACT_ABORT ON
antes de emitir mi consulta :SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions
Concedido
Full Control
Everyone
para :HKEY_LOCAL_MACHINE/Software/Microsoft/MSSQLServer
en ambos servidores.
Además de la configuración de seguridad, tuve que abrir algunos puertos en ambos servidores para que se ejecutara la transacción. Tuve que abrir el puerto 59640 pero de acuerdo con la siguiente sugerencia, el puerto 135 debe estar abierto. http://support.microsoft.com/kb/839279
De acuerdo, los servicios se inician, hay una ruta de Ethernet entre ellos, la resolución de nombres funciona, los servidores vinculados funcionan y se deshabilita la autenticación de transacciones.
Mi instinto me dice que es un problema de firewall, pero me vienen a la mente algunas cosas ...
- ¿Las máquinas están en el mismo dominio? (Sí, no debería importar con la autenticación deshabilitada)
- ¿Se están ejecutando firewalls en las máquinas? DTC puede ser un poco molesto para los firewalls, ya que utiliza un rango de puertos, consulte http://support.microsoft.com/kb/306843 Por el momento, inhabilitaría los firewalls para identificar el problema.
- ¿Qué dice DTC ping? http://www.microsoft.com/download/en/details.aspx?id=2868
- ¿En qué cuenta se está ejecutando el servicio SQL?
Encontrado, MSDTC en el servidor remoto era un clon del servidor local.
Desde el registro de eventos de la aplicación de Windows:
Tipo de evento: error
Origen del evento: MSDTC
Categoría de evento: CM
Identificador de evento: 4101
Fecha: 19/9/2011
Hora: 1:32:59 PM
Usuario: N / A
Computadora: ASITESTSERVER
Descripción:El MS DTC local detectó que el MS DTC en ASICMSTEST tiene la misma identidad única que el MS DTC local. Esto significa que los dos MS DTC no podrán comunicarse entre sí. Este problema normalmente ocurre si uno de los sistemas se clonó usando herramientas de clonación no compatibles. MS DTC requiere que los sistemas se clonen utilizando herramientas de clonación compatibles como SYSPREP. Al ejecutar ''msdtc -uninstall'' y luego ''msdtc -install'' desde el símbolo del sistema se solucionará el problema. Nota: Al ejecutar ''msdtc -uninstall'', el sistema perderá toda la información de configuración de MS DTC.
Para obtener más información, vea el Centro de ayuda y soporte en http://go.microsoft.com/fwlink/events.asp .
Corriendo
msdtc -uninstall
msdtc -install
y luego detener y reiniciar el servicio de SQL Server lo solucionó.
Mi última aventura con MSDTC y este error hoy resultó ser un problema de DNS. Está en el camino correcto preguntando si las máquinas están en el mismo dominio, EBarr. Excelente lista para este tema, por cierto!
Mi situación: necesitaba un servidor en un dominio secundario para poder ejecutar transacciones distribuidas contra un servidor en el dominio principal a través de un firewall. He utilizado servidores vinculados bastante a lo largo de los años, así que tenía todos los ajustes habituales en SQL para un servidor vinculado y en MSDTC que Ian documentó tan bien arriba. Configuré MSDTC con una gama de puertos TCP (5000-5200) para utilizar en ambos servidores, y organizó un agujero de cortafuegos entre las cajas para los puertos 1433 y 5000-5200. Eso debería haber funcionado. El servidor vinculado probó OK y pude consultar muy bien el servidor SQL remoto a través del servidor vinculado, pero no pude conseguir que permitiera una transacción distribuida. Incluso pude ver una conexión en el servidor QA desde el servidor DEV, pero algo no estaba haciendo el viaje de regreso.
Podría PING el servidor DEV de QA usando un FQDN como: PING DEVSQL.dev.domain.com
No pude PING el servidor DEV con solo el nombre de la máquina: PING DEVSQL
Se suponía que el servidor DEVSQL era un miembro de ambos dominios, pero el nombre no se estaba resolviendo en el DNS del dominio principal ... algo le había sucedido a la cuenta de la máquina para DEVSQL en el dominio principal. Una vez que agregamos DEVSQL al DNS para el dominio principal, y "PING DEVSQL" funcionó desde el servidor QA remoto, este problema se resolvió para nosotros.
¡Espero que esto ayude!
Si los servidores están agrupados y hay un DTC agrupado, debe desactivar la seguridad en el DTC agrupado, no en el DTC local.
Si su servidor de Destino está en otra nube o centro de datos, entonces necesita agregar la entrada de host del servicio MSDTC (Servidor de Destino) en su servidor de origen.
Pruebe esto si el problema no se resuelve, después de habilitar la configuración de MSDTC.