sql server和mysql之间的链接服务器上的分布式事务

我有一个表说, Table1的SQL Server 2014和MySQL的两个上。

Table1
ID INT,Code VARCHAR(100)

我使用“Microsoft OLEDB Provider for ODBC”在SQL Server中创建了链接服务器MyLinkedServer

**链接服务器**

EXEC master.dbo.sp_addlinkedserver @server = N'MyLinkedServer', @srvproduct=N'MyLinkedServer', @provider=N'MSDASQL', @datasrc=N'MyLinkedServer'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MyLinkedServer',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='########'

链接服务器设置

EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'remote proc transaction promotion', @optvalue=N'true'

链接的服务器已成功创建,并且能够查询SQL Server中的Mysql表。

询问

当我跑步

INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'

记录被插入。 但是,当我启动事务并运行INSERT ,出现错误:

BEGIN TRAN
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
COMMIT

错误:

用于链接服务器“MyLinkedServer”的OLE DB提供程序“MSDASQL”返回消息“[MySQL] [ODBC 5.3(a)驱动程序]不支持可选功能”。 Msg 7391,Level 16,State 2,Line 8操作无法执行,因为链接服务器“MyLinkedServer”的OLE DB提供程序“MSDASQL”无法启动分布式事务。

我到目前为止所尝试过的。

  • 在MSDTC中启用XA事务

  • 在链接服务器提供程序中启用以下设置

  • 嵌套查询
  • 只有零级
  • 允许进程
  • 支持'Like'运算符
  • 我检查了以下链接和他们的建议,但错误仍然存​​在:

    MySQL和MSSQL之间的分布式事务

    SQL-Server和MySQL的互操作性?

    SQL Server和MySQL同步

    编辑

    额外细节:

  • MySQL在Ubuntu机器上使用InnoDB存储引擎。

  • 我已经配置了ODBC连接器,并用它来配置链接服务器中使用的ODBC系统数据源


  • 理论上这应该起作用。

    我会建议采取不同的步骤来解决这个问题:

  • 你有没有检查你的MySql存储引擎呢? 它看起来只有InnoDB存储引擎支持按MySql文档分发事务:https://dev.mysql.com/doc/refman/5.7/en/xa.html

  • 查看是否可以切换到使用MySQL连接器安装连接连接到SQL Server中的MySql而不是OLEDB提供程序,该状态由支持分布事务的MySql文档提供。

  • 如果仍然无法正常工作,可能是MSDTC服务本身存在一些问题,请参阅是否可以将MySql服务器上运行的SQL Server实例(如果使用的是Windows MySql)分离出来,或尝试在Windows上安装Windows MySql Sql Server框来获取两个MySql之间的分布式事务。 哪些能够指出你的实际问题。

  • 编辑:

    不幸的是,它看起来你证明这不起作用,我仔细看看MySql文档,并对不起,它看起来我没有彻底阅读它,它说:

    目前,在MySQL连接器中,MySQL Connector / J 5.0.0和更高版本直接支持XA

    通过其他一些谷歌搜索,我发现这个:https://bugs.mysql.com/bug.php?id = 37283,人们多年前报告这个bug,他们将此标记为“无法修复”。

    有人在这里提出了一些建议:https://social.msdn.microsoft.com/Forums/en-US/fc07937d-8b42-43da-8c75-3a4966ab95f9/xa-msdtc?forum=windowstransactionsprogramming,这是实现你自己的XA-合规资源管理器供您的应用程序使用(https://msdn.microsoft.com/en-us/library/ms684317.aspx)


    在SQL 2014上,您可能已将链接服务器配置为不参与分布式事务。 尽管您可以尝试在sp_addlinkedserver的@provstr参数中添加“Enlist = false”

    链接地址: http://www.djcxy.com/p/27109.html

    上一篇: Distributed Transaction on Linked Server between sql server and mysql

    下一篇: Dependencies in forms Symfony2