MySQL和MSSQL之间的分布式事务

时间:2011-08-26 12:11:45

标签: mysql sql-server sql-server-2005 odbc distributed-transactions

我已经尝试了将近一周的时间来分发交易。我在MSSQL上有一些尝试从MySQL中选择数据的程序。我需要在一个(!)事务中执行此操作。当时我在MSSQL上使用来自OpenLink的Single-Tier MySQL驱动程序设置了ODBC连接,它告诉我,XA事务成功运行(配置ODBC连接后集成了一个测试按钮)。然后我通过MSDASQL将MSSQL中的链接服务器设置为此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 个答案:

答案 0 :(得分:2)

这里有两个重要方面 -

1)似乎OLE DB does have support用于分布式事务 - 所以我假设用于ODBC数据源的Microsoft OLE DB提供程序也应该......

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

通过调用 -

在ODBC驱动程序中打开分布式事务

的SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC)

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

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

log a support case OpenLink Software {{}}}可以更进一步......

答案 1 :(得分: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. 展开“组件服务”,“计算机”并右键单击“我的电脑”,   然后选择“属性”。

  4.   
  5. 单击“MSDTC”选项卡,然后单击“安全配置”。

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

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

  10.   
  11. 停止然后重新启动SQL Server以确保它与之同步   MS DTC的变化。

  12.         

    在Windows Vista和Windows Server 2008上:

         
        
    1. 单击“开始”按钮,在“开始搜索”框中键入dcomcnfg,然后单击“确定”   然后按ENTER键打开组件服务。你也可以输入   在“开始搜索”框中打开组件的%windir%\ system32 \ comexp.msc   服务。

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

    4.   
    5. 右键单击“本地DTC”,然后选择“属性”。

    6.   
    7. 单击“本地DTC属性”对话框中的“安全”选项卡。

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

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

    12.   
    13. 停止然后重新启动SQL Server以确保它同步   随着MS DTC的变化。

    14.   

另请参阅Registry Entries Are Required for XA Transaction Support并验证第三方驱动程序XA DLL是否创建了这些注册表项。