Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接服务器无法开始分布式事务-SQL Server_Sql_Sql Server_Ssms - Fatal编程技术网

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

链接服务器无法开始分布式事务-SQL Server,sql,sql-server,ssms,Sql,Sql Server,Ssms,我是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 我最后得到的是一个错误:

我是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)

更新

如果我删除
截断表…
插入到…
,只需发出:

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

它正常运行并返回行。

关闭链接服务器的
远程过程事务升级

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

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

关闭链接服务器的
远程过程事务升级

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

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

Msg 15247,16级,状态1,过程sp_serveroption,第27行[批处理开始行0]用户没有执行此操作的权限。链接服务器“ORAD”的OLE DB提供程序“OraOLEDB.Oracle”返回消息“无法在事务中登记”。Msg 7391,级别16,状态2,第244行无法执行该操作,因为链接服务器“ORAD”的OLE DB提供程序“OraOLEDB.Oracle”无法开始分布式事务。
假设我没有适当的权限执行此操作?
Msg 15247,级别16,状态1,过程sp_serveroption,第27行[批处理开始行0]用户没有执行此操作的权限。链接服务器“ORAD”的OLE DB提供程序“OraOLEDB.Oracle”返回消息“无法在事务中登记”。Msg 7391,级别16,状态2,第244行由于链接服务器“ORAD”的OLE DB提供程序“OraOLEDB.Oracle”无法启动分布式事务,因此无法执行该操作。
假设我没有适当的权限执行此操作?