unavailable servidor habilitar está error dtc disponible sql-server linked-server msdtc

sql-server - habilitar - msdtc no está disponible en el servidor



El servidor MSDTC en el servidor no está disponible (3)

Me sale este extraño error en SQL Server. Y no puedo encontrar la solución en publicaciones antiguas.

Tengo este procedimiento:

create proc _upJM_SyncAll_test as begin DECLARE @SQLString nvarchar(max) set @SQLString = N'' DELETE FROM OPENQUERY([LOCAL_MYSQL],''''SELECT acSubject FROM _utjm_setitemprices'''') where acSubject not in (select acSubject from _uvJM_SetSubj) DELETE FROM OPENQUERY([LOCAL_MYSQL],''''SELECT acSubject FROM _utjm_setsubj'''') where acSubject not in (select acSubject from _uvJM_SetSubj) update a set acName2 = b.acName2, acName3 = b.acName3, acAddress = b.acAddress, acPost = b.acPost, acPostName = b.acPostName, acCountry = b.acCountry, acVATCodePrefix = b.acVATCodePrefix, acCode = b.acCode, anDaysForPayment = b.anDaysForPayment from OPENQUERY([LOCAL_MYSQL],''''SELECT * FROM _utjm_setsubj'''') a join _uvJM_SetSubj b on (a.acSubject = b.acSubject) where 1=1 and ( isnull(a.acName2,'''''''') <> isnull(b.acName2,'''''''') OR isnull(a.acName3,'''''''') <> isnull(b.acName3,'''''''') OR isnull(a.acAddress,'''''''') <> isnull(b.acAddress,'''''''') OR isnull(a.acPost,'''''''') <> isnull(b.acPost,'''''''') OR isnull(a.acPostName,'''''''') <> isnull(b.acPostName,'''''''') OR isnull(a.acCountry,'''''''') <> isnull(b.acCountry,'''''''') OR isnull(a.acVATCodePrefix,'''''''') <> isnull(b.acVATCodePrefix,'''''''') OR isnull(a.acCode,'''''''') <> isnull(b.acCode,'''''''') OR isnull(a.anDaysForPayment,'''''''') <> isnull(b.anDaysForPayment,'''''''') ) insert into OPENQUERY([LOCAL_MYSQL],''''SELECT * FROM _utjm_setsubj'''') (acSubject, acName2, acName3, acAddress, acPost, acPostName, acCountry, acVATCodePrefix, acCode, anDaysForPayment) select b.acSubject, b.acName2, b.acName3, b.acAddress, b.acPost, b.acPostName, b.acCountry, b.acVATCodePrefix, b.acCode, b.anDaysForPayment from OPENQUERY([LOCAL_MYSQL],''''SELECT * FROM _utjm_setsubj'''') a right join _uvJM_SetSubj b on (a.acSubject = b.acSubject) where a.acSubject is null '' EXECUTE sp_executesql @SQLString; end

Cuando ejecuto el procedimiento en el estudio de administración de esta manera:

exec dbo._upJM_SyncAll_test

todo está bien. No obtengo ningún error, la sincronización funciona bien.

Pero cuando puse ejecutar en trigger de esta manera:

create trigger _utrJM_SetSubj on tHE_SetSubj after insert, update, delete as begin exec dbo._upJM_SyncAll_test end

Me sale este error:

Msg 8501, nivel 16, estado 3, procedimiento _upJM_SyncAll_test, línea 54
MSDTC en el servidor ''servidor'' no está disponible.

El procedimiento _upJM_SyncAll_test tiene solo 39 líneas ...


El servicio "Coordinador de transacciones distribuidas" no se estaba ejecutando. Por lo tanto, el servicio comenzó y el tipo de servicio cambió también a automático.


En mi caso, el servicio fue detenido . solución: necesita activar el servicio MSDTC

  1. ve a Servicios . (INICIO> CONFIGURACIONES> PANEL DE CONTROL> HERRAMIENTAS ADMINISTRATIVAS> SERVICIOS)
  2. Encuentre el servicio llamado '' Coordinador de transacciones distribuidas '' y haga clic con el botón derecho (en él y seleccione)> Iniciar .
  3. hacer que este servicio se ejecute automáticamente para resolver este problema permanentemente

Los desencadenantes se incluyen en la transacción implícita requerida para las instrucciones de inserción, actualización y eliminación. Debido a que se está conectando a un servidor vinculado dentro de una transacción, SQL Server lo promueve a una transacción distribuida.

Tendrá que configurar MSDTC, puede abrir MMC y cargar el complemento MSDTC o usar la siguiente secuencia de comandos para abrir las transacciones entrantes y salientes.

https://technet.microsoft.com/en-us/library/cc731495.aspx

REG QUERY "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccess REG QUERY "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccessTransactions REG QUERY "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccessInbound REG QUERY "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccessOutbound PAUSE REG ADD "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccess /t REG_DWORD /d 1 REG ADD "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccessTransactions /t REG_DWORD /d 1 REG ADD "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccessInbound /t REG_DWORD /d 1 REG ADD "HKLM/Software/Microsoft/MSDTC/Security" /v NetworkDtcAccessOutbound /t REG_DWORD /d 1 PAUSE net stop MSDTC net start MSDTC PAUSE