Unable to start a nested transaction for OLE DB provider

Na palestra que ministrei recentemente no 4h Microsoft do Guia DBA no Rio de Janeiro apresentei em um dos meus laboratórios como montar uma query distribuída.

Logo em seguida, recebi uma mensagem de um participante me questionando sobre o ERRO 7395 quando ele tenta inserir registro na view distribuída.

Quando este erro ocorre, geralmente é porque faltou o XACT_Abort ON ou falta permissão no Local DTC.

Veja abaixo como resolver o problema:

Para o XACT_Abort ON basta adicionar o código abaixo:

SET XACT_ABORT ON
GO
BEGIN DISTRIBUTED TRANSACTION
INSERT INTO cliente
(cdcliente,
[nmcliente]
,[nfuf])
VALUES
(80011,
'Rodrigo', 'RJ')
COMMIT TRANSACTION

Não querendo alterar todos os códigos do software?

Se não houver impacto em outros bancos de dados da mesma instância, basta alterar a propriedade na guia de conexões.

Veja o código abaixo:

EXEC sys.sp_configure N'user options', N'16384'
GO
RECONFIGURE WITH OVERRIDE
GO

Com esta configuração alterada podemos suprimir o SET XACT_Abort ON do código.

Entretanto, se você não teve êxito até agora, pode ser permissão no DTC.

A permissão será concedida no Component Services.

No prompt digite dcomcnfg.exe

Após aberto o Component Services acesse Console Root\Component Services\Computers\My Computer\Distributed Transactions

Segue abaixo a imagem da tela que abrirá:

clip_image002

 

Com o botão direito do mouse sobre Local DTC vá em Properties na guia Security e habilite os parâmetros conforme a imagem abaixo:

clip_image004

Desta forma estamos concedendo permissão para o Distributed Transaction.

Todas as vezes que eu recebi este erro, resolvi com uma das duas opções acima.

 

Espero que ajude!

Abraço, Rodrigo

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.