unable transaction linked begin mysql sql-server sql-server-2005 odbc distributed-transactions

transaction - sql server linked server mysql



Transacciones distribuidas entre MySQL y MSSQL (2)

He intentado durante casi una semana para que las transacciones distribuidas funcionen. Tengo algunos procedimientos en MSSQL que intentan seleccionar datos de MySQL. Mi necesidad es hacer esto en una (!) Transacción. En el momento en que configuré la conexión ODBC en MSSQL con el controlador MySQL de nivel único de OpenLink, que me dice que las transacciones XA funcionan correctamente (hay un botón de prueba integrado después de configurar la conexión ODBC). Luego configuré un servidor vinculado en MSSQL vía MSDASQL a esta conexión ODBC, pero cuando hago

begin distributed transaction select * from optin..lu_source_proc select * from openquery(optinxa, ''SELECT * FROM tbl_source_proc'') commit transaction

Recibo el error, que no se puede iniciar ninguna otra transacción dentro de la transacción real. ( Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "Es können keine weiteren Transaktionen in dieser Sitzung gestartet werden." zurückgeben. )

Otra prueba:

set transaction isolation level serializable begin transaction select * from optin..lu_source_proc select * from openquery(optinxa, ''SELECT * FROM tbl_source_proc'') commit transaction

Resultados en Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "[OpenLink][ODBC][Driver]Driver does not support this function" zurückgeben. ¿Pero por qué declara el controlador ODBC al configurar que las transacciones XA funcionan?


Hay dos aspectos importantes aquí:

1) Parece que OLE DB tiene soporte para transacciones distribuidas, por lo que supondría que el proveedor Microsoft OLE DB para orígenes de datos ODBC también debería ...

También supondría que si MSDASQL admitía transacciones distribuidas, manejaría esa funcionalidad directamente en lugar de delegarla al controlador ODBC ...

Las transacciones distribuidas se activan en el controlador ODBC llamando:

SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC)

Por lo tanto, habilitar el registro del controlador OpenLink a través de los diálogos de creación de DSN debería ayudar a determinar si se llama a SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC).

2) Tendríamos que ver el seguimiento adicional para ver la actividad ODBC inmediatamente antes del error "El controlador no admite esta función" ...

Puede registrar un caso de soporte con el software OpenLink para llevar esto más lejos ...


Se requieren los siguientes pasos si desea usar fuentes de datos XA junto con el Coordinador de transacciones distribuidas de Microsoft (MS DTC) para manejar transacciones distribuidas :

En Windows XP y Windows Server 2003:

  1. Desde el Panel de control, abra Herramientas administrativas y luego abra Servicios de componentes. También puede hacer clic en el botón Inicio, hacer clic en Ejecutar, escribir dcomcnfg en el cuadro Abrir y luego presionar OK para abrir Servicios de componentes.

  2. Expanda Servicios de componentes, computadoras y haga clic derecho en Mi PC, y luego seleccione Propiedades.

  3. Haga clic en la pestaña MSDTC y luego en Configuración de seguridad.

  4. Seleccione la casilla de verificación Habilitar transacciones XA y luego haga clic en Aceptar. Esto hará que se reinicie un servicio MS DTC.

  5. Haga clic en Aceptar nuevamente para cerrar el cuadro de diálogo Propiedades y luego cierre Servicios de componentes.

  6. Detenga y luego reinicie SQL Server para asegurarse de que se sincronice con los cambios de MS DTC.

En Windows Vista y Windows Server 2008:

  1. Haga clic en el botón Inicio, escriba dcomcnfg en el cuadro Iniciar búsqueda y luego presione ENTRAR para abrir Servicios de componentes. También puede escribir% windir% / system32 / comexp.msc en el cuadro Iniciar búsqueda para abrir Servicios de componentes.

  2. Expanda Servicios de componentes, Computadoras, Mi PC y luego Coordinador de transacciones distribuidas.

  3. Haga clic con el botón derecho en DTC local y luego seleccione Propiedades.

  4. Haga clic en la pestaña Seguridad en el cuadro de diálogo Propiedades de DTC local.

  5. Seleccione la casilla de verificación Habilitar transacciones XA y luego haga clic en Aceptar. Esto hará que se reinicie un servicio MS DTC.

  6. Haga clic en Aceptar nuevamente para cerrar el cuadro de diálogo Propiedades y luego cierre Servicios de componentes.

  7. Detenga y luego reinicie SQL Server para asegurarse de que se sincroniza con los cambios de MS DTC.

Consulte también las entradas del registro son necesarias para la compatibilidad con transacciones XA y valide que el DLL del controlador de terceros crea estas entradas de registro.