MSSQLSERVER_3989

Aplica-se a: SQL Server

Detalhes

Atributo Valor
Nome do produto SQL Server
ID do evento 3989
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico XACT_UNSUPPORT_PARALLEL_TRAN3
Texto da mensagem Não é permitido iniciar uma nova solicitação porque ela deve ter um descritor de transação válido.

Explicação

Esse erro ocorre quando você executa uma consulta distribuída que une várias tabelas hospedadas por instâncias remotas do SQL Server enquanto a configuração da XACT_ABORT sessão está ON. Uma mensagem de erro semelhante à seguinte é relatada ao usuário:

Mensagem 3989, Nível 16, Estado 1, Linha nº
Não é permitido iniciar uma nova solicitação porque ela deve ter um descritor de transação válido.

Causa

Há algumas limitações de design na maneira como o SQL Server lida com DQs (consultas distribuídas) quando as seguintes condições são verdadeiras:

  • O SQL Server une várias tabelas de uma fonte de dados remota do SQL Server.
  • A sessão que emite a consulta não está inscrita em uma transação distribuída.

Nessa situação, uma tentativa de executar a consulta pode gerar um dos dois erros mencionados na seção Explicação.

Ação do usuário

Para resolver o problema, coloque a consulta distribuída em uma instrução 'begin distributed transaction':

BEGIN DISTRIBUTED TRANSACTION
/*The actual Distributed Query goes next, outside of comments*/
COMMIT TRANSACTION