【发布时间】:2015-09-03 20:19:18
【问题描述】:
我在 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
错误:
链接服务器“MyLinkedServer”的 OLE DB 提供程序“MSDASQL”返回消息“[MySQL][ODBC 5.3(a) 驱动程序]不支持可选功能”。 消息 7391,第 16 层,状态 2,第 8 行 无法执行该操作,因为链接服务器“MyLinkedServer”的 OLE DB 提供程序“MSDASQL”无法开始分布式事务。
到目前为止我已经尝试过什么。
在 MSDTC 中启用 XA 事务
-
在链接服务器提供程序中启用以下设置
- 嵌套查询
- 仅零级
- 允许进程内
- 支持“点赞”运算符
我检查了以下链接及其建议,但错误仍然存在:
Distributed transactions between MySQL and MSSQL
SQL-Server and MySQL interoperability?
编辑
其他细节:
MySQL 在 Ubuntu 机器上使用 InnoDB 存储引擎。
我已经配置了ODBC connector,并用它来配置链接服务器中使用的ODBC系统数据源
【问题讨论】:
-
您能否发布您的 ddl 以创建链接服务器?
-
@PhilipDevine - 使用链接服务器详细信息更新问题
-
在这里你可以找到一些在另一种情况下对我有帮助的检查:stackoverflow.com/questions/7473508/…HTH
标签: mysql sql-server linked-server distributed-transactions