我在SQL Server 2014和MySQL上都有一个表Table1
。
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
错误:
OLE DB提供程序" MSDASQL"对于链接服务器" MyLinkedServer"返回消息" [MySQL] [ODBC 5.3(a)驱动程序]不支持可选功能"。 Msg 7391,Level 16,State 2,Line 8 无法执行该操作,因为OLE DB提供程序" MSDASQL"对于链接服务器" MyLinkedServer"无法开始分布式交易。
到目前为止我的尝试。
在MSDTC中启用XA事务
在链接服务器提供程序
中启用以下设置我检查了以下链接及其建议,但错误仍然存在:
Distributed transactions between MySQL and MSSQL
SQL-Server and MySQL interoperability?
修改
其他详情:
MySQL在Ubuntu机器上使用InnoDB存储引擎。
我已经配置了ODBC connector并用它来配置链接服务器中使用的ODBC系统数据源
答案 0 :(得分:3)
理论上这应该有效。
我建议采取不同的步骤来解决这个问题:
你有没有检查过你的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),或者尝试在Sql Server框上安装Windows MySql,以便在两个MySql之间运行分发事务。哪能指出实际问题。
修改强>
不幸的是,看起来你证明这不起作用,我仔细看了一下MySql文件,抱歉看起来我没有彻底阅读它,它说:
目前,在MySQL连接器中,MySQL Connector / J 5.0.0及更高版本直接支持XA
通过其他一些谷歌搜索我发现了这个:https://bugs.mysql.com/bug.php?id=37283,人们多年前就报告了这个错误,他们认为这是一个不可解决的问题。
有人在此提出了一些建议: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)
答案 1 :(得分:0)
与SQL 2014一样,您可以将链接服务器配置为不在分布式事务中登记。虽然您可以尝试添加" Enlist = false"在sp_addlinkedserver的@provstr参数中