我在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) Driver]不支持的可选功能”。Msg 7391,级别16,状态2,行8 由于OLE DB提供程序“MSDASQL”无法开始分布式事务,因此无法执行操作。
我到目前为止尝试了以下方法:
在MSDTC中启用XA事务
已启用链接服务器提供程序中的以下设置
- Nested queries
- Level zero only
- Allow inprocess
- Supports ‘Like’ Operator
我检查了以下链接和它们的建议,但是错误仍然存在:
编辑
其他细节:
MySQL在Ubuntu机器上使用InnoDB存储引擎。
我已经配置了ODBC连接器并使用它来配置ODBC系统数据源,该数据源用于链接服务器。