MySQL 和 MSSQL 之间的分布式事务

发布于 2024-12-01 14:00:03 字数 1057 浏览 2 评论 0原文

我已经尝试了近一周来让分布式事务正常工作。我在 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” “optinxa” hat die Meldung “[OpenLink][ODBC][Driver]Driver does not support this function” zurückgeben. 但是为什么在配置时声明 ODBC 驱动程序 XA 事务确实有效?

I've tried for nearly a week now to get distributed transactions working. I've some procedures on MSSQL which try to select data from MySQL. My need is to do this in one(!) transaction. At the time I've set up ODBC connection on MSSQL with Single-Tier MySQL driver from OpenLink, which states me, that XA transactions work successfully (there is a test button integrated after configuring ODBC connection). Then I've set up a linked server in MSSQL via MSDASQL to this ODBC connection, but when doing

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

I get the error, that no further transaction could be started inside the actual 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.)

Another test:

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

Results in Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "[OpenLink][ODBC][Driver]Driver does not support this function" zurückgeben. But why states the ODBC driver on configuring, that XA transactions do work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里寻她 2024-12-08 14:00:03

这里有两个重要的方面 -

1)似乎 OLE DB 确实支持分布式事务 - 所以我认为 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 活动...

您可以 使用 OpenLink Software 记录支持案例为了更进一步......

There are two important aspects here --

1) It seems that OLE DB does have support for distributed transactions - so I would assume that the Microsoft OLE DB Provider for ODBC Data Sources should too...

I would also assume that if MSDASQL did support distributed transactions then it would handle that functionality directly rather than delegating it to the ODBC Driver...

Distributed transactions are turned on in the ODBC driver by calling --

SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC)

So, enabling OpenLink driver logging via the DSN creation dialogs should help determine whether SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC) is called.

2) We would need to see additional tracing in order to see the ODBC activity immediately leading up to the "Driver does not support this function" error...

You can log a support case with OpenLink Software to take this further...

梦屿孤独相伴 2024-12-08 14:00:03

如果要将 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 是否创建这些项注册表项。

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:

On Windows XP and Windows Server 2003:

  1. From Control Panel, open Administrative Tools, and then open
    Component Services. You can also click the Start button, click Run,
    type dcomcnfg in the Open box, and then press OK to open Component
    Services.

  2. Expand Component Services, Computers and right-click My Computer,
    and then select Properties.

  3. Click the MSDTC tab, and then click Security Configuration.

  4. Select the Enable XA Transactions check box, and then click OK.
    This will cause a MS DTC service restart.

  5. Click OK again to close the Properties dialog box, and then close
    Component Services.

  6. Stop and then restart SQL Server to ensure that it syncs up with
    the MS DTC changes.

On Windows Vista and Windows Server 2008:

  1. Click the Start button, type dcomcnfg in the Start Search box, and
    then press ENTER to open Component Services. You can also type
    %windir%\system32\comexp.msc in the Start Search box to open Component
    Services.

  2. Expand Component Services, Computers, My Computer, and then
    Distributed Transaction Coordinator.

  3. Right-click Local DTC and then select Properties.

  4. Click the Security tab on the Local DTC Properties dialog box.

  5. Select the Enable XA Transactions check box, and then click OK.
    This will cause a MS DTC service restart.

  6. Click OK again to close the Properties dialog box, and then close
    Component Services.

  7. Stop and then restart SQL Server to make sure that it syncs up
    with the MS DTC changes.

See also Registry Entries Are Required for XA Transaction Support and validate that the third party driver XA DLL creates these registry entries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文