Servidor vinculado do SQL Server: “Não é possível iniciar mais transações nesta sessão.”

3

Estou tentando executar uma operação INSERT em um servidor vinculado:

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

e retorna o erro:

OLE DB provider "SQLNCLI" for linked server "LIVE" returned message "Cannot start more transactions on this session.".
Msg 7395, Level 16, State 2, Line 3
Unable to start a nested transaction for OLE DB provider "SQLNCLI" for linked server "LIVE". A nested transaction was required because the XACT_ABORT option was set to OFF.

Este banco de dados local foi movido de 2000 (onde as consultas funcionavam) para 2005 (onde as consultas não funcionam). O servidor remoto é o 2008 R2.

O que você tentou?

A lista exaustiva de coisas desta pergunta que fiz há dois anos .

Como você criou o servidor vinculado?

--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'

Mas o que você tentou?

  • desabilitei todas as opções de segurança do MSDTC em ambos os servidores

  • verificouqueosrelógiosestãosincronizados(oque,poralgumarazãodesconhecida,quebraráváriosesquemasdeautenticaçãoseelesestiveremforadesincronia)

  • i desabilitei os firewalls nos dois servidores (sem captura de tela; você só precisa confiar em mim)

  • deixando a junção do domínio

Quais são as versões dos servidores?

  • Local : 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)
  • Remoto vinculado : 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)
por Ian Boyd 05.06.2013 / 16:03

1 resposta

4

Em a documentação de SET XACT_ABORT :

XACT_ABORT must be set ON for data modification statements in an implicit or explicit transaction against most OLE DB providers, including SQL Server. The only case where this option is not required is if the provider supports nested transactions."

Talvez você estivesse usando um provedor que oferece suporte a transações aninhadas em 2000. Parece que você precisa definir XACT_ABORT . Não tenho certeza se isso se encaixa com o que seu código de produção está fazendo embora.

Esta resposta pode ajudar: Qual é o benefício de usar" SET XACT_ABORT ON "em um procedimento armazenado?

    
por 06.06.2013 / 20:05