Sql-Server
SQL Server 連結伺服器:“無法在此會話上啟動更多事務。”
我正在嘗試
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)
對於大多數 OLE DB 提供程序(包括 SQL Server)的隱式或顯式事務中的數據修改語句,XACT_ABORT 必須設置為 ON。唯一不需要此選項的情況是提供程序支持嵌套事務。”
也許您在 2000 上使用了支持嵌套事務的提供程序。似乎您需要設置
XACT_ABORT
. 不確定這是否符合您的生產程式碼正在執行的操作。這個答案可能會有所幫助:在儲存過程中使用“SET XACT_ABORT ON”有什麼好處?