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事务
在链接服务器提供程序中启用以下设置
我检查了以下链接和他们的建议,但错误仍然存在:
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