SQL Server linked server: Cannot start more transactions on this session
Probando un insert a travez de un Linked Server me encuentro con el siguiente error:
begin tran INSERT INTO [ElServidorLinkeado].[LaBaseRemota].ElEsquema].[LaTabla] ([saludcoop_id],[numero_identificacion],[razon_social],[fecha_novedad], [estado_procesamiento_codigo],[tipo_novedad_codigo]) VALUES (3,3,'CruzBlanca',GETDATE(),'P','A')
OLE DB provider "SQLNCLI10" for linked server "ElServidorLinkeado" returned message "Cannot start more transactions on this session.". Msg 7395, Level 16, State 2, Line 1 Unable to start a nested transaction for OLE DB provider "SQLNCLI10" for linked server "ElServidorLinkeado". A nested transaction was required because the XACT_ABORT option was set to OFF.
Habiendo revisado la configuracion del MSDTC y demas indicaciones de serverfault.com y habiendo logrado la confirmacion mediante el DTCPing (Cómo solucionar problemas de conectividad en MS DTC mediante la herramienta DTCPing)
Noto el comentario: Desde la documentacion de SET XACT_ABORT:
XACT_ABORT debe estar en ON para los comandos de modificacion de datos ya sea de tipo implicito o explicito cuando se accede por medio de proveedores OLE DB, incluyendo SQL Server.
SET XACT_ABORT ON begin tran INSERT INTO [ElServidorLinkeado].[LaBaseRemota].ElEsquema].[LaTabla] ([saludcoop_id],[numero_identificacion],[razon_social],[fecha_novedad], [estado_procesamiento_codigo],[tipo_novedad_codigo]) VALUES (3,3,'CruzBlanca',GETDATE(),'P','A')
(1 row(s) affected)
Y ahora si, con todo funcionando les dejo una nota de color al respecto: What is the benefit of using “SET XACT_ABORT ON” in a stored procedure?
Servidor Local:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4290.0 (X64) Aug 5 2013 12:40:54 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
Servidor Remoto:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.2 (Build 9200: ) (Hypervisor)