【问题标题】:Distributed transactions between MySQL and MSSQLMySQL 和 MSSQL 之间的分布式事务
【发布时间】:2011-11-04 11:45:13
【问题描述】:

我已经尝试了将近一周的时间来让分布式事务正常工作。我在 MSSQL 上有一些程序试图从 MySQL 中选择数据。我需要在一个(!)交易中做到这一点。当时我已经使用 OpenLink 的单层 MySQL 驱动程序在 MSSQL 上设置了 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 事务确实有效?

【问题讨论】:

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


【解决方案1】:

这里有两个重要的方面--

1) 似乎 OLE DB does have support 用于分布式事务 - 所以我认为 Microsoft OLE DB Provider for 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 更进一步...

【讨论】:

  • 是的,我知道 MSDASQL 支持分布式事务,并且我与 OpenLink 支持部门取得了联系。他们告诉我,他们的单层 MySQL 驱动程序和 MSDASQL 都支持 XA 事务。所以他们帮不上忙。 MSDTC 中的 XA 事务也是允许的(通过 Windows W2k3 中的组件服务配置)。我还启用了 OpenLink 驱动程序的日志记录,但似乎日志文件仅填充来自驱动程序测试的日志数据,而没有真正的事务。我会在星期一再试一次。现在谢谢。
  • 我这周病了,所以我现在不能测试(必须等到下周)
  • 为了他人的利益——MSDASQL 确实支持分布式事务——msdn.microsoft.com/en-us/library/ms719630(v=VS.85).aspx
【解决方案2】:

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. 从控制面板,打开管理工具,然后打开 组件服务。您也可以单击开始按钮,单击运行, 在 Open 框中键入 dcomcnfg,然后按 OK 打开 Component 服务。

  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 是否创建了这些注册表项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 2015-09-03
    • 2023-03-29
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多