你尝试过什么?

你尝试过什么?

我正在尝试INSERT对链接服务器执行操作:

DBCC TRACEON (3604, 7300)

BEGIN TRANSACTION

INSERT INTO LIVE.Contoso.dbo.Events (EventGUID, EventDate, LoginGUID, UserGUID, EventType, Notes, TargetGUID) 
VALUES ('{494D023F-CD5A-11E2-9F18-C86000D0B92A}', getdate(), '{3B4F90C0-CD5A-11E2-9F18-C86000D0B92A}', '{494D023D-CD5A-11E2-9F18-C86000D0B92A}', 1, N'Test notes', '{494D023E-CD5A-11E2-9F18-C86000D0B92A}')

ROLLBACK TRANSACTION

并返回错误:

链接服务器“LIVE”的 OLE DB 提供程序“SQLNCLI”返回消息“无法在此会话中启动更多事务。”。
消息 7395,级别 16,状态 2,第 3 行
无法为链接服务器“LIVE”的 OLE DB 提供程序“SQLNCLI”启动嵌套事务。由于 XACT_ABORT 选项设置为 OFF,因此需要嵌套事务。

该本地数据库从 2000(查询有效)移至 2005(查询无效)。远程服务器是 2008 R2。

你尝试过什么?

详尽清单这个问题我两年前问过

您是如何创建链接服务器的?

--EXEC master.dbo.sp_dropserver @server = N'LIVE'
EXEC master.dbo.sp_addlinkedserver @server = N'LIVE', @srvproduct=N'', @provider=N'SQLOLEDB', @datasrc=N'vader'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LIVE', @locallogin = NULL, @useself = N'False', @rmtuser = N'Contoso', @rmtpassword = N'Battery Horse Staple Correct'

但你尝试过什么?

  • 我禁用了两台服务器上的所有 MSDTC 安全选项

    在此处输入图片描述

  • 检查时钟是否同步(如果不同步,由于某些未知原因,将会破坏各种身份验证方案)

    在此处输入图片描述

  • 我禁用了两台服务器上的防火墙(没有截图;你必须相信我)

  • 离开重新加入域

服务器有哪些版本?

  • 当地的Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
  • 联动遥控器Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

答案1

记录SET XACT_ABORT

对于大多数 OLE DB 提供程序(包括 SQL Server),在隐式或显式事务中,必须将 XACT_ABORT 设置为 ON,以进行数据修改语句。唯一不需要此选项的情况是提供程序支持嵌套事务。

也许您使用的是支持 2000 嵌套事务的提供程序。似乎您需要设置XACT_ABORT。但不确定这是否适合您的生产代码所做的事情。

这个答案可能有帮助:在存储过程中使用“SET XACT_ABORT ON”有什么好处?

相关内容