5

Ho provato per quasi una settimana a far funzionare le transazioni distribuite. Ho alcune procedure su MSSQL che cercano di selezionare i dati da MySQL. Il mio bisogno è di farlo in una (!) Transazione. Al momento ho impostato la connessione ODBC su MSSQL con il driver MySQL a livello singolo da OpenLink, che mi informa che le transazioni XA funzionano correttamente (c'è un pulsante di test integrato dopo aver configurato la connessione ODBC). Poi ho creato un server collegato in MSSQL via MSDASQL a questa connessione ODBC, ma quando si faTransazioni distribuite tra MySQL e MSSQL

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

ottengo l'errore, che nessun ulteriore operazione potrebbe essere avviato all'interno della transazione reale. (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.)

Un altro test:

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

Risultati in Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "[OpenLink][ODBC][Driver]Driver does not support this function" zurückgeben. Ma perché gli stati il ​​driver ODBC sulla configurazione, che le transazioni XA funzionano?

+0

Hai trovato un modo per risolvere questo? Ho un problema in questa domanda http://stackoverflow.com/questions/30911206/distributed-transaction-on-linked-server-between-sql-server-and-mysql – ughai

+0

No, non l'ho mai fatto funzionare. – rabudde

risposta

2

Ci sono due aspetti importanti qui -

1) Sembra che OLE DB does have support per le transazioni distribuite - quindi presumo che il provider Microsoft OLE DB per origini dati ODBC dovrebbe troppo ...

vorrei anche supporre che se MSDASQL ha sostenuto le transazioni distribuite allora sarebbe gestire questa funzionalità direttamente invece di delegare al driver ODBC ...

transazioni distribuite sono attivati ​​nel driver ODBC chiamando -

SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC)

Così, consentendo la registrazione OpenLink conducente tramite le finestre di dialogo di creazione DSN dovrebbe aiutare a determinare se SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC) è chiamato.

2) Avremmo bisogno di vedere ulteriore tracciamento per vedere l'attività ODBC che porta immediatamente al "driver non supporta questa funzione" errore ...

È possibile log a support case con OpenLink Software di prendere questo ulteriore ...

+0

Sì, so che MSDASQL supporta le transazioni distribuite e sono stato in contatto con il supporto OpenLink. Mi dicono che il loro driver MySQL a livello singolo e MSDASQL supportano entrambe le transazioni XA. Quindi non potevano aiutare. Sono consentite anche transazioni XA in MSDTC (configurate tramite il servizio componente in Windows W2k3). Ho anche abilitato l'accesso a OpenLink Driver, ma sembra che il file di registro si riempia solo di dati di log provenienti dal test del driver e nessuna transazione reale. Farò un tentativo di nuovo lunedì. Grazie per ora. – rabudde

+0

Sono malato questa settimana, quindi non posso testare ora (devo aspettare fino alla prossima settimana) – rabudde

+0

Dammi il numero di riferimento del caso OpenLink e darò un'occhiata 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:

In Windows XP e Windows Server 2003:

  1. Dal Pannello di controllo, aprire Strumenti di amministrazione e quindi aprire Servizi componenti . È inoltre possibile fare clic sul pulsante Start, fare clic su Esegui, digita dcomcnfg nella casella Apri, quindi premere OK per aprire Servizi componente .

  2. Espandere Servizi componenti, Computer e fare clic con il tasto destro del mouse su Risorse del computer, e selezionare Proprietà.

  3. Fare clic sulla scheda MSDTC, quindi su Configurazione di sicurezza.

  4. Selezionare la casella di controllo Abilita transazioni XA, quindi fare clic su OK. Ciò causerà il riavvio del servizio MS DTC.

  5. Fare nuovamente clic su OK per chiudere la finestra di dialogo Proprietà, quindi chiudere Servizi componenti .

  6. Arrestare e riavviare SQL Server per assicurarsi che si sincronizzi con MS DTC.

In Windows Vista e Windows Server 2008:

  1. Fare clic sul pulsante Start, digitare dcomcnfg nella casella Inizia ricerca e quindi premere INVIO per aprire Servizi componenti. È inoltre possibile digitare % windir% \ system32 \ comexp.msc nella casella Inizia ricerca per aprire i servizi Component .

  2. Espandere Servizi componenti, Computer, Risorse del computer, quindi Distributed Transaction Coordinator.

  3. Fare clic con il pulsante destro del mouse su DTC locale, quindi selezionare Proprietà.

  4. Fare clic sulla scheda Protezione nella finestra di dialogo Proprietà DTC locale.

  5. Selezionare la casella di controllo Abilita transazioni XA, quindi fare clic su OK. Ciò causerà il riavvio del servizio MS DTC.

  6. Fare nuovamente clic su OK per chiudere la finestra di dialogo Proprietà, quindi chiudere Servizi componenti .

  7. Arrestare e riavviare SQL Server per assicurarsi che si sincronizzi con con le modifiche MS DTC.

Vedi anche Registry Entries Are Required for XA Transaction Support e verificare che il terzo pilota partito XA DLL crea queste voci di registro.