繁体   English   中英

链接服务器无法开始分布式事务 - SQL Server

[英]Linked Server unable to begin a distributed transaction - SQL Server

我是SQL Server 2016 (SP2-CU7-GDR)最终用户。

我正在尝试执行以下性质的查询:

DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'proprietary sql code'
TRUNCATE TABLE [wundermahndb].[dbo].[Training]
INSERT INTO [wundermahndb].[dbo].[Training]
exec ( @sqlcode ) at OLAP

我最终得到的是一个错误:

OLE DB provider "OraOLEDB.Oracle" for linked server "OLAP" returned message "Unable to enlist in the transaction.".
Msg 7391, Level 16, State 2, Line 243
The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" for linked server "OLAP" was unable to begin a distributed transaction.

然后我尝试在查询的顶部添加这两行:

set XACT_ABORT on
EXEC master.dbo.sp_serveroption @server=N'OLAP', @optname=N'rpc out', @optvalue=N'true'

并得到以下错误:

Msg 15247, Level 16, State 1, Procedure sp_serveroption, Line 27 [Batch Start Line 0]
User does not have permission to perform this action.
OLE DB provider "OraOLEDB.Oracle" for linked server "OLAP" returned message "Unable to enlist in the transaction.".
Msg 7391, Level 16, State 2, Line 243
The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" for linked server "OLAP" was unable to begin a distributed transaction.

我已经引用了这篇文章,但该解决方案是我在上面尝试过的,但显然不起作用。

我也看过:

如何运行此查询?

(注意 - 我正在使用 SSMS 2017)

更新

如果我删除TRUNCATE TABLE...INSERT INTO... ,然后简单地发出:

DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'proprietary sql code'
exec ( @sqlcode ) at OLAP

它正常运行并返回行。

关闭链接服务器的remote proc transaction promotion 选项

EXEC master.dbo.sp_serveroption @server=N'OLAP', 
                                @optname=N'remote proc transaction promotion', 
                                @optvalue=N'false'

因此 SQL Server 不会尝试与远程服务器启动分布式事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM