5

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). A continuación, he creado un servidor vinculado en MSSQL a través MSDASQL a esta conexión ODBC, pero cuando se haceTransacciones distribuidas entre MySQL y MSSQL

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

consigo el error, y cuando no se pudo iniciar la 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é los estados del controlador ODBC acerca de la configuración, que las transacciones XA Cómo funcionan?

+0

¿Encontró una manera de resolver esto? Tengo un problema en esta pregunta http://stackoverflow.com/questions/30911206/distributed-transaction-on-linked-server-between-sql-server-and-mysql – ughai

+0

No, nunca consigo que esto funcione. – rabudde

Respuesta

2

Hay dos aspectos importantes aquí -

1) Parece que OLE DB does have support para transacciones distribuidas - por lo que supondría que el proveedor Microsoft OLE DB para fuentes de datos ODBC también debería hacerlo ...

también me suponer que si MSDASQL hizo transacciones distribuidas de apoyo, entonces sería manejar esa funcionalidad directamente en lugar de delegar al controlador ODBC ...

las transacciones distribuidas son activados en el controlador ODBC llamando -

SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC)

Por lo tanto, lo que permite el registro de OpenLink conductor a través de los cuadros de diálogo de creación de DSN debe ayudar a determinar si SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC) se llama.

2) Habría que ver el rastreo adicional con el fin de ver la actividad de ODBC inmediatamente anterior al "controlador no soporta esta función" error ...

Puede log a support case con OpenLink Software ir más lejos ...

+0

Sí, sé que MSDASQL admite transacciones distribuidas y estuve en contacto con el Soporte de OpenLink. Me dicen que su controlador MySQL de nivel único y MSDASQL son compatibles con XA Transactions. Entonces no pudieron ayudar. Las transacciones XA en MSDTC también están permitidas (configuradas a través del servicio de componentes en Windows W2k3). También he habilitado el inicio de sesión en OpenLink Driver, pero parece que el archivo de registro se llena solo con datos de registro de pruebas de controladores y sin transacciones reales. Lo probaré el lunes otra vez. Gracias por ahora. – rabudde

+0

Estoy enfermo esta semana, así que no puedo probar ahora (tiene que esperar hasta la próxima semana) – rabudde

+0

Dame el número de referencia del caso OpenLink y echaré un vistazo al caso ... –

0

The following steps are required if you want to use XA data sources together with Microsoft Distributed Transaction Coordinator (MS DTC) for handling distributed transactions:

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 los Servicios del Componente .

  2. Expanda Servicios de componentes, computadoras y haga clic con el botón 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 cierre Servicios de componentes.

  6. Detenga y luego reinicie SQL Server para asegurarse de que se sincroniza con cambia el 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, a continuación, pulse ENTER para abrir Servicios de componentes. También puede escribir % windir% \ system32 \ comexp.msc en el cuadro Iniciar búsqueda para abrir los Servicios del Componente .

  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 cierre Servicios de componentes.

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

Ver también Registry Entries Are Required for XA Transaction Support y validar que el tercer piloto partido XA DLL crea estas entradas del registro.

Cuestiones relacionadas