这两天做MS SQL到MY SQL数据的实时同步,原本计划通过触发器,调用存储过程(执行openquery操作mysql),结果一直显示:链接服务器的OLE DB访问接口"MSDASQL"无法启动分布式事务。按照网上提供各种方案尝试,结果仍无法解决。
最后发现有热心网友提示:
MySQL OLE DB driver does not support MSDTC because it doesn’t support auto-enlistment in the ambient COM+ transaction. If you really want to, you can write your own XA.DLL to wrap MySQL OLEDB driver in an XA transaction.
最后只能变换思路解决,增加一下本地的日志表,通过触发器往日志表中添加记录,然后通过job调用存储过程(执行openquery操作mysql)就一切OK了。各位网友提供的解决方案,应该是在MS SQL到MS SQL同步的分布式事务故障解决方案,MS SQL到MY SQL的同步只能另辟蹊径了。
转网友提供的MS SQL到MS SQL同步分布式事务解决方案内容如下,转载记录方便后续使用,原文链接
一、 问题现象
在执行分布式事务时,在sql server 2005下收到如下错误:
消息 7391,级别 16,状态 2,过程 xxxxx,第 16 行
无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。
在sql server 2000下收到如下错误:
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。