5

我已经尝试了将近一周的时间来让分布式事务正常工作。我在 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 事务确实有效?

4

2 回答 2

2

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

1)似乎 OLE DB确实支持分布式事务 - 所以我认为 Microsoft OLE DB Provider for ODBC Data Sources 也应该......

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

分布式事务在 ODBC 驱动程序中通过调用 --

SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC)

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

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

您可以使用OpenLink 软件记录支持案例,以进一步实现...

于 2011-08-26T14:43:07.993 回答
0

如果您想将 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,然后按 Enter 打开组件服务。您还可以在“开始搜索”框中键入 %windir%\system32\comexp.msc 以打开组件服务。

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

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

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

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

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

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

另请参阅XA 事务支持需要注册表项并验证第三方驱动程序 XA DLL 是否创建了这些注册表项。

于 2011-08-29T16:54:43.903 回答