Sql-Server-2008-R2

連結伺服器:另一個會話正在使用的事務上下文

  • December 4, 2019

我正在使用連結伺服器在分佈式事務中執行一些查詢。它在分佈式事務中不起作用。我收到以下錯誤:

另一個會話正在使用的事務上下文。

即使是這個簡化的例子也行不通:

IF EXISTS(SELECT server_id from sys.servers WHERE name = 'SomeServer')
BEGIN
      EXEC sp_dropserver  @server = N'SomeServer';
END

EXEC sp_addlinkedserver 
  @server = N'SomeServer',
  @srvproduct = N'',
  @provider = N'SQLNCLI',
  @datasrc = N'localhost';

EXEC sp_serveroption
      @server = N'SomeServer', 
      @optname = 'rpc out',
      @optvalue = 'on';
GO


BEGIN DISTRIBUTED TRAN;

EXEC('SELECT TOP 100 * FROM [SomeServer].[SomeDatabase].dbo.tblFoo')

ROLLBACK;

EXEC sp_dropserver  @server = N'SomeServer';

刪除分發的工作,或完全刪除開始/回滾 tran 也可以。執行sp_whoisactive 不會返回任何行。我不得不多次重新啟動伺服器(在我的筆記型電腦上),因為即使我殺死了 sp_whoisactive 返回的所有 spid,我也無法殺死分佈式事務。

在那些可能的相關情況下,殺死 thos spids 不止一次給我:

SPID X:正在進行事務回滾。預計回滾完成:0%。

http://msdn.microsoft.com/en-us/library/ms188716.aspx

環回連結伺服器不能用於分佈式事務。嘗試從分佈式事務中對環回連結伺服器進行分佈式查詢會導致錯誤,例如錯誤 3910:"

$$ Microsoft $$$$ ODBC SQL Server Driver $$$$ SQL Server $$另一個會話正在使用事務上下文。”當由未啟用多個活動結果集 (MARS) 的連接發出的 INSERT…EXECUTE 語句針對環回連結伺服器執行時,此限制不適用。請注意,在連接上啟用 MARS 時,限制仍然適用。

引用自:https://dba.stackexchange.com/questions/16052