New transaction cannot enlist in the specified transaction coordinator.

Published 08 February 08 04:55 PM | Misael Monterroca

Escenario:

Servidor 1:

  • Windows Server 2000 SP4
  • Sql Server 2000 SP4

Servidor 2

  • Windows Server 2003 SP2
  • BizTalk Server 2006
  • SQL Server 2005 SP2

 

Servidor 2 tiene una orquestación en Biztalk la cual necesita persistir información en una base de datos localizada en el servidor 1, cuando biztalk intenta crear la transcacción dentro de SQL Server 2000 da el siguiente error: "New transaction cannot enlist in the specified transaction coordinator."

 

Utilizando la herramienta DTCTester se obtiene el siguiente resultado:

 

   1: Executed: dtctester
   2: DSN:  test
   3: User Name: sa
   4: Password: sa
   5: tablename= #dtc8346
   6: Creating Temp Table for Testing: #dtc8346
   7: Warning: No Columns in Result Set From Executing: 'create table #dtc8346 (ival int)'
   8: Initializing DTC
   9: Beginning DTC Transaction
  10: Enlisting Connection in Transaction
  11: Error:
  12: SQLSTATE=25S12,Native error=-2147168219,msg='[Microsoft][ODBC SQL Server Driver]Distributed transaction error'
  13: Error:
  14: SQLSTATE=24000,Native error=0,msg=[Microsoft][ODBC SQL Server Driver]Invalid cursor state
  15: Typical Errors in DTC Output When
  16: a.  Firewall Has Ports Closed
  17: -OR-
  18: b.  Bad WINS/DNS entries
  19: -OR-
  20: c.  Misconfigured network 
  21: -OR-
  22: d.  Misconfigured SQL Server machine that has multiple netcards.
  23: Aborting DTC Transaction
  24: Releasing DTC Interface Pointers
  25: Successfully Released pTransaction Pointer.

 

Posibles soluciones:

    1. Firewall Has Ports Closed, No existe ningún software que se encuentre bloqueando ningún puerto
    2. Bad WINS/DNS entries, EL dns se encuentra correctamente configurado, utilizando DTCPING el servidor responde correctamente
    3. Misconfigured network, Descartado, misma solución que el punto anterior
    4. Misconfigured SQL Server machine that has multiple netcards, Ambos servidores tienen dos tarjetas de red, se dejo habilitada 1 y el problema persistia.

Solución

  1. En servidor 1, localizar la entrada del registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security (si no existe, crearla)
  2. Crear una entrada del tipo DWORD con el nombre NetworkDtcAccessTip con el valor 1, (Cero deshabilita el acceso vía TIP) Mas información
  3. En el servidor 2, habilitar entrar a  Component Services -> Computers -> My Computer -> Boton Derecho Properties  Ir a MSDTC Tab - > Habilitar Enable Transaction Internet Protocol (TIP) Transactions
  4. En ambos servidores  reiniciar MSDTC  net stop msdtc , net start msdtc
  5. Probar nuevamente :D

Si obtienen un resultado similar a la siguiente imagen, es que todo está funcionando perfectamente

Read the complete post at http://squad.devworx.com.mx/blogs/misael/archive/2008/02/08/new-transaction-cannot-enlist-in-the-specified-transaction-coordinator.aspx