5

我已经尝试了将近一周的时间来获取分布式事务的工作。我在MSSQL上有一些程序试图从MySQL中选择数据。我的需要是在一个(!)交易中完成此操作。当时我使用OpenLink的单层MySQL驱动程序在MSSQL上建立了ODBC连接,其中声明XA事务成功工作(配置ODBC连接后集成了一个测试按钮)。然后,我通过MSDASQL设立在MSSQL中的链接服务器这一ODBC连接,但这样做MySQL和MSSQL之间的分布式事务

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事务做的工作?

+0

您是否找到解决此问题的方法?我有一个问题在这个问题http://stackoverflow.com/questions/30911206/distributed-transaction-on-linked-server-between-sql-server-and-mysql – ughai

+0

不,我从来没有得到这个工作。 – rabudde

回答

2

这里有两个重要的方面 -

1)看来,OLE DB does have support分布式事务 - 所以我会假设,在Microsoft OLE DB提供程序的ODBC数据源也应该这么做......

我还假设,如果确实MSDASQL支持分布式事务,然后将处理该功能直接而不是将其委托给ODBC驱动程序...

分布式事务通过调用已打开的ODBC驱动程序 -

的SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC)

因此,通过DSN创建对话框允许OpenLink的驱动程序的日志记录将有助于确定的SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC)是否被调用。

2)我们需要看到更多的跟踪才能看到的ODBC活动立即导致到“驱动程序不支持此功能”的错误...

可以log a support caseOpenLink Software进一步发展这一...

+0

是的,我知道MSDASQL支持分布式事务,并且我与OpenLink支持联系。他们表示,他们的单层MySQL驱动程序和MSDASQL都支持XA事务。所以他们忍不住。 MSDTC中的XA事务也被允许(通过Windows W2k3中的组件服务进行配置)。我还启用了OpenLink Driver中的日志记录功能,但看起来,日志文件只填充了驱动程序测试中的日志数据,并没有实际的事务。我会在星期一再试一次。现在感谢。 – rabudde

+0

我本周生病了,所以现在无法测试(必须等到下周) – rabudde

+0

给我OpenLink的病例参考号,我会看看病例... –

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

在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, 然后按ENTER键打开组件服务。您也可以在开始搜索框中键入 %windir%\ system32 \ comexp.msc以打开组件 服务。

  2. 展开组件服务,计算机,我的电脑,然后分布式事务处理协调器 。

  3. 用鼠标右键单击本地DTC,然后选择属性。

  4. 单击本地DTC属性对话框上的安全选项卡。

  5. 选中“启用XA事务”复选框,然后单击“确定”。 这将导致MS DTC服务重新启动。

  6. 再次单击确定关闭属性对话框,然后关闭 组件服务。

  7. 停止并重新启动SQL Server以确保它与MS DTC更改同步 。

又见Registry Entries Are Required for XA Transaction Support和验证的第三方驱动程序XA DLL创建这些注册表项。