首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Msg 7391:链接服务器无法开始分布式事务(两个svrs都在本地运行)

问Msg 7391:链接服务器无法开始分布式事务(两个svrs都在本地运行)
EN

Stack Overflow用户
提问于 2016-09-10 17:20:17
回答 3查看 1.6K关注 0票数 8

我在我的Win 10个人电脑上安装了一个从SqlServer 2014到MySQL 5.7.3的SqlServer。select & insert查询通过openquery单独工作很好,但是insert查询在触发器中不起作用。请不要标记这是一个副本,除非你找到一个‘治愈’,但尚未列出以下!

OLE DB提供程序"MSDASQL“用于链接服务器"MYSQL”返回消息"MySQLOptional特性不受支持“。 *Msg 7391,16级,状态2,过程TRG_AfterEventInsert,第14行 无法执行此操作,因为链接服务器"MYSQL“的OLE提供程序"MSDASQL”无法开始分布式事务。

有很多关于这方面的帖子,但我已经做了我能找到的一切,但它仍然不能工作。我发现了一个名为dtcping的MS实用程序,它一开始失败了,直到我翻转了注册表设置,但现在它成功了。

在DTC属性屏幕上,我启用了Network、允许远程、允许输入/出站而不进行身份验证和启用XA事务。在我的链接服务器上,我有rpc & rpc = true和“启用提升DT”false。我在防火墙中添加了msdtc应用程序。

我还试图为我的LinkedServer禁用DTC,但这不起作用。我还是会犯错误。

有人能在这里建议调试措施吗?我花了一天的时间在这件事上,但没有成功。MySQL驱动程序为5.3 (32位)。

更新: dtcPing运行时没有错误,但是当我尝试触发器插入时,我在dtctrace.log中看到了以下内容

TRANSACTION_BEGUN RM_ENLISTED_IN_TRANSACTION“资源管理器#1001登记为事务登记#1. RM guid = '57c2b4b4-f37a-4017-a1fc-2d95bd64693d'”

RECEIVED_ABORT_REQUEST_FROM_BEGINNER“从初学者收到中止事务的请求”

TRANSACTION_ABORTING“事务正在中止”

EN

回答 3

Stack Overflow用户

发布于 2021-06-11 22:27:49

创建触发器时,请使用以下构造来避免事务:

代码语言:javascript
复制
create trigger ti on t for insert, update as
begin

    COMMIT -- Commit FIRST to avoid DTC...
    insert into  [mysql]...[mysql.customers] (a,b) -- Do you work
    select  i, 'Test'
    from    inserted
    BEGIN TRAN -- Start tran again otherwise it will crash!!
end
go

注意,"mysql...mysql.customers“语法,请求提供程序MSDASQL只启用0级设置(转到链接服务器并在提供程序上设置)。

但正如其他人所建议的那样,你最好还是把工作从扳机上踢下来。

完整测试代码:

代码语言:javascript
复制
---------------
-- Run on MYSQL...
---------------
CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;

---------------
-- Run on SQL Server
---------------
create table t (i int)

go

create trigger ti on t for insert, update as
begin

    COMMIT -- Commit tran to avoid DTC...
    insert into  [mysql]...[mysql.customers] (a,b)
    select  i, 'Test'
    from    inserted
    begin tran -- Start tran again otherwise it will crash!
end
go

insert into t (i) select 1

-- Verify results
select *
from [mysql]...[mysql.customers]
票数 1
EN

Stack Overflow用户

发布于 2016-09-13 20:24:33

你是说MySQL 5.3吗?当前的手册显示版本低至5.7,并且只支持InnoDB存储引擎14.3.7 XA交易支持分布式事务。

如果您检查了有关MySQL部件的所有内容,那么您是否检查过Server端的不同类型的触发器?您是否正在使用不受支持的数据类型?

票数 0
EN

Stack Overflow用户

发布于 2016-09-14 23:11:58

“即使没有显式指定事务,在触发器中包装的分布式查询也被视为分布式事务。”

support.microsoft.com/en-us/kb/274348

所以您需要使用从触发器调用链接服务器中的DTC或use (2)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39428652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档