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

前端之家收集整理的这篇文章主要介绍了sql server和mysql之间链接服务器上的分布式事务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表在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',@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?

SQL Server and MySQL Syncing

编辑

额外细节:

> 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 MysqLsql 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)

猜你在找的MsSQL相关文章