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',@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,'Code1' COMMIT
错误:
OLE DB provider “MSDAsql” for linked server “MyLinkedServer” returned message “[MysqL][ODBC 5.3(a) Driver]Optional feature not supported”.
Msg 7391,Level 16,State 2,Line 8
The operation could not be performed because OLE DB provider “MSDAsql” for linked server “MyLinkedServer” was unable to begin a distributed transaction.
到目前为止我尝试了什么.
>在MSDTC中启用XA事务
>在链接服务器提供程序中启用以下设置
Distributed transactions between MySQL and MSSQL
SQL-Server and MySQL interoperability?
编辑
额外细节:
> MysqL正在Ubuntu机器上使用InnoDB存储引擎.
>我已经配置了ODBC connector并使用它来配置链接服务器中使用的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 MysqL在sql Server框中获取两个MysqL之间的分配事务.哪能指出实际问题.
编辑:
不幸的是,看起来你证明这不起作用,我仔细看看MysqL文件,抱歉看起来我没有彻底阅读它,它说:
Currently,among the MysqL Connectors,MysqL Connector/J 5.0.0 and higher supports XA directly
通过其他一些谷歌搜索我发现了这个: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)