Local DTC vs Clustered DTC
En los últimos 6 meses me encontré con 2 casos de linked servers entre una instancia de SQL Server 2008 R2 64 bits en un Cluster de Windows 2008 R2 y una instancia standalone de SQL Server 2000 32 bits en los cuáles los cuáles las transacciones distribuidas no estaban funcionando.
La causa raíz del problema sigue en investigación, sin embargo, tratando de entender el problema verifiqué que todo estuviera bien configurado y realicé algunas pruebas.
Revisé lo siguiente:
- Que la resolución de nombres funcionara bien
- Que el DTC estuviera bien configurado en cuanto a la sección de seguridad
- Se probó el linked server sin transacción distribuida y funcionaba
- El DTCPing dio resultado correcto
- Hasta donde recuerdo el DTCTester también dio resultado correcto.
Aún cuando todos los puntos anteriores fueron exitosos, las transacciones distribuidas seguían fallando. En las pruebas que hice, probé creando un DTC Clusterizado en el grupo de SQL Server 2008 y siguió fallando.
Después, sin muchas esperanzas, probé borrando todos los DTC Clusterizados y configurando los DTC locales y, para mi sorpresa, funcionó.
En éste punto la pregunta se convirtió en, ¿Que desventajas tengo en utilizar los local DTC’s en lugar de los DTC’s clusterizados?, así que tuve que investigar y probar éste punto.
Antes que nada, ¿Cuál es la razón de tener DTC’s clusterizados?, antes de Windows Server 2008, la razón era que en Windows Cluster la única forma de utilizar el MSDTC era clusterizándolo, sin embargo en Windows Server 2008 el número de opciones aumentó. Ahora es posible tener más de un DTC clusterizado y también es posible utilizar el DTC no clusterizado de cada nodo. Entonces, ¿Sigue siendo necesario clusterizar el DTC?, ¿Cuáles son los beneficios de clusterizarlo y cuáles son las limitantes de solo utilizar el local DTC?
La respuesta corta (basado en mi conocimiento y pruebas) es que hay algunos escenarios por los que el ambiente clusterizado tiene beneficios, pero en muchos casos la diferencia es muy pequeña y puedes usar el local DTC en lugar del DTC clusterizado con muy poco riesgo.
¿Cuándo es preferible usar el DTC Clusterizado en lugar del local?, Un escenario es cuando tienes múltiples instancias de SQL Server en cada nodo. En ese caso con local DTC todas las instancias usarán el único DTC disponible en la instancia, si quieres mayor escalabilidad y disponibilidad entonces es recomendable configurar múltiples DTC’s clusterizados, uno para cada instancia.
Otro escenario sería cuando el DTC local falla, en ese caso, las instancias no van a hacer failover automático, en cambio, si estuviéramos utilizando un DTC Clusterizado, el failover del DTC es automático y solo las transacciones distribuidas activas hacen rollback, las nuevas transacciones distribuidas corren sin problema.
En resumen, es recomendable tener los DTC clusterizados, sin embargo, si estás teniendo problemas prueba con los DTC locales para ver si eso soluciona tu problema.
“Las opiniones e ideas expresadas en este blog son las de los Autores y no necesariamente declaran o reflejan la opinión de Microsoft”