加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:28:46 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表在SQL Server 2014和 MySQL上表示Table1. Table1ID INT,Code VARCHAR(100) 我使用“Microsoft OLEDB Provider for ODBC”在SQL Server中创建了一个链接服务器MyLinkedServer. **链接服务器** EXEC master.dbo.sp_addlinkedserver @server = N'MyLin
我有一个表在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 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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读