Распределенные транзакции между MySQL и MSSQL - PullRequest
5 голосов
/ 26 августа 2011

Я почти неделю пытался заставить работать распределенные транзакции.У меня есть некоторые процедуры на MSSQL, которые пытаются выбрать данные из MySQL.Мне нужно сделать это за одну (!) Транзакцию.В то время, когда я установил соединение ODBC на MSSQL с одноуровневым драйвером MySQL от OpenLink, в котором говорится, что транзакции XA работают успешно (после настройки соединения ODBC есть встроенная кнопка тестирования).Затем я настроил связанный сервер в MSSQL через MSDASQL для этого соединения ODBC, но при выполнении

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

я получаю сообщение об ошибке, что никакая дальнейшая транзакция не может быть запущена внутри фактической транзакции.(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.)

Другой тест:

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

Результат Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "[OpenLink][ODBC][Driver]Driver does not support this function" zurückgeben. Но почему при настройке драйвер ODBC указывает, что транзакции XA работают?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Здесь есть два важных аспекта -

1) Кажется, что OLE DB поддерживает поддержку для распределенных транзакций - поэтому я предполагаю, что MicrosoftПоставщик OLE DB для источников данных ODBC тоже должен ...

Я бы также предположил, что если MSDASQL поддерживает распределенные транзакции, он будет обрабатывать эту функцию напрямую, а не делегировать ее драйверу ODBC ...

Распределенные транзакции включаются в драйвере ODBC путем вызова -

SQLSetConnectAttr (SQL_ATTR_ENLIST_IN_DTC)

Таким образом, включение ведения журнала драйвера OpenLink через диалоги создания DSN должно помочь определить, должен ли SQLSetConnectAttr (SQL_ATTR_ENLIST_)).

2) Нам нужно увидеть дополнительную трассировку, чтобы увидеть, как активность ODBC сразу приводит к ошибке «Драйвер не поддерживает эту функцию» ...

Вы может зарегистрировать случай поддержки с помощью OpenLink Software , чтобы продвинуться дальше...

0 голосов
/ 29 августа 2011

Следующие шаги необходимы, если вы хотите использовать источники данных XA вместе с координатором распределенных транзакций Microsoft (MS DTC) для обработки распределенных транзакций :

В Windows XP иWindows Server 2003:

  1. В Панели управления откройте Администрирование, а затем откройте Службы компонентов.Также можно нажать кнопку «Пуск», нажать «Выполнить», ввести dcomcnfg в поле «Открыть» и нажать «ОК», чтобы открыть службы компонентов.

  2. Развернуть Службы компонентов, Компьютеры и щелкнуть правой кнопкой мыши «Мой компьютер»и затем выберите Свойства.

  3. Перейдите на вкладку MSDTC, а затем нажмите Конфигурация безопасности.

  4. Установите флажок Включить транзакции XA изатем нажмите ОК.Это приведет к перезапуску службы MS DTC.

  5. Нажмите кнопку ОК еще раз, чтобы закрыть диалоговое окно «Свойства», а затем закройте службы компонентов.

  6. Стопи затем перезапустите SQL Server, чтобы убедиться, что он синхронизируется с изменениями MS DTC.

В Windows Vista и Windows Server 2008:

  1. Нажмитенажмите кнопку Пуск, введите dcomcnfg в поле Начать поиск и нажмите клавишу ВВОД, чтобы открыть Службы компонентов.Вы также можете ввести% windir% \ system32 \ comexp.msc в поле Начать поиск, чтобы открыть Службы компонентов.

  2. Разверните Службы компонентов, Компьютеры, Мой компьютер, а затем Координатор распределенных транзакций.

  3. Щелкните правой кнопкой мыши локальный код неисправности и выберите «Свойства».

  4. Перейдите на вкладку «Безопасность» в диалоговом окне «Свойства локального кода неисправности».

  5. Установите флажок Включить транзакции XA и нажмите кнопку ОК.Это приведет к перезапуску службы MS DTC.

  6. Нажмите кнопку ОК еще раз, чтобы закрыть диалоговое окно «Свойства», а затем закройте службы компонентов.

  7. Стопа затем перезапустите SQL Server, чтобы убедиться, что он синхронизируется с изменениями MS DTC.

См. также Записи реестра необходимы для поддержки транзакций XA ипроверьте, что сторонний драйвер XA DLL создает эти записи реестра.

...