Yar*_*lav 8 sql-server-2008-r2 linked-server distributed-transactions
我有一个链接服务器,我需要运行以下语句:
INSERT INTO...EXEC linkedserver.sp @parameter
Run Code Online (Sandbox Code Playgroud)
两台服务器都是 SQL Server 2008R2 SP1。一旦我运行它,我就会收到此错误:
消息 7391,级别 16,状态 2,第 6 行 由于链接服务器“MY.LINKED.SERVER”的 OLE DB 提供程序“SQLNCLI10”无法开始分布式事务,因此无法执行该操作。
搜索错误后,我看到很多建议运行:
EXEC master.dbo.sp_serveroption
@server = N'[mylinkedserver]',
@optname = N'remote proc transaction promotion',
@optvalue = N'false'
Run Code Online (Sandbox Code Playgroud)
我应该注意此操作是否有任何安全隐患?
其他选项是在主服务器上使用链接服务器对象的高级属性:
Kin*_*hah 10
当您在INSERT INTO...EXEC
本地执行时,sql server 会遵守它,但是当您使用 Linked server 时,sql server 必须启动本地事务并提升/升级为分布式事务。
来自 -->如何在 SQL Server 2008 中创建自治事务
“远程进程事务提升”是 SQL Server 2008 上的一个新选项,它允许您控制是否要在分布式事务中登记远程存储过程调用。当此选项关闭 (FALSE) 时,本地事务将不会提升为分布式事务。这就是我们如何能够以“自主事务”的方式分离外部和内部事务。
据我所知,没有安全隐患。
此外,有关详细信息,请参阅sp_serveroption。