Parte I Introducción: Descripción del escenario, datos del ambiente y lo que deben saber sobre transacciones



Acerca de las Transacciones


Para este tema deben estar familiarizados con lo que son las transacciones. A continuación les explicaré de manera muy sencilla porque se necesidad, pero pueden encontrar mas detalles en el sitio oficial de MS para transacciones: Transaction Management in Windows.


Un ambiente transaccional es requerido cuando estamos ejecutando un proceso constitudido de "n" pasos y cada uno de esos pasos puede realizar cambios en un sistema/app/DB. Si en alguno de esos pasos llegue a fallar, que es lo que pasa con el resto de los pasos que ya fueron ejecutado y que realizaron modificaciones. En el 90% de los casos, lo que se requiere es que la información que fue alterada sea restituida para mantener la consistencia de la información y para ello las transacciones nos ayudan. De tal forma que si estamos ejecutando nuestro proceso en un ambiente transaccional, este se encarga de que si alguno de los pasos falla, todas las modificaciones ocurridas durante dicha transacción se restablezcan automáticamente.


Una cuestión que se debe considerar cuando queremos realizar transacciones es que el sistema/app/DB que queremos que participe en dicha transacción debe soportar transacciones, el ejemplo por excelencia son las bases de datos (DB) como SQL, DB2, Oracle, etc. que son aplicaciones que están hechos para poder soportar transacciones, que por el contrario si vemos el File System de Windows que no soporta transacciones, por lo que si uno de las pasos dentro de nuestro proceso realiza una operación como crear un archivo y durante la ejecución existe alguna falla, la transacción deshará los pasos anteriores pero nuestro archivo simplemente se quedará intacto pues el File System no maneja transacciones. En su actualidad los ambientes que soportan transacciones son limitados, pero es una tendencia que puede ir cambiando con el tiempo y con los requerimientos.


Para ambientes que no maneja transacciones, estas deben ser controladas de manera manual, esto es que si creamos un archivos en el File System y el proceso falla en algún punto, tendremos que ejecutar un proceso de borrado de dicho archivo a esto se le llama compensación de transacciones y como se tiene que hacer el trabajo que no hace el sistema, puede llegar a ser bastante complicado el desarrollar este tipo de transacciones.


Otro hecho muy importante que se debe considerar es que cuando empleamos transacciones (haciendo notar que su uso es opcional) el performance se ve disminuido en comparación del mismo proceso cuando no se emplean transacciones.


Claro que en esta descripción existen muchas implicaciones muy interesantes, pero es la manera mas sencilla de explicarlo en este momento y los detalles serán explicados a lo largo de este post.


Ahora que hemos descrito lo que es una transacción, BTS dentro de las orquestaciones nos da la habilidad de poder emplear transacciones ya que una de sus funciones es poder modificar sistemas/app/BD y esto trae consigo la necesidad de mantener consistencia en la información en el caso de que uno de los sistemas/app/DB es modificado y existe una falla durante el proceso.


Acerca del Ambiente


El ambiente donde desarrolle este ejemplo es una maquina virtual con Windows 2003 Server SP1, BTS 2006 RC y SQL 2005. En el laboratorio emplearemos un .NET ServicedComponent (.NET con soporte de COM+ para realizar las transacciones sobre una base de datos de SQL.


Un elemento que controla las transacciones y que necesita funcionar correctamente es el Microsoft Distribute Transaction Coordinator (MSDTC). Los problemas mas comunes que provocan que no funcione correctamente pueden ser por instalación, configuración o por problemas de seguridad (firewall y banderas de acceso). Si están 100% seguros de que el MSDCT funciona correctamente, pueden continuar con la siguiente sección, si desean probar si esta funcionando correctamente, pueden emplear las siguientes herramientas:



  • DTCPing.exe. Esta herramienta no la he probado y la documentación no esta bien detallada. Soporta solamente Windows 2000.
  • DTCTester Tool. Permite probar conectividad empleando un SQL, que puede ser tanto local como remoto y básicamente lo que hace es ejecutar un comando en SQL empleando una transacción por medio de un DNS y por eso no importa la versión de SO. Esta herramienta contiene una mejor documentación que el DTCPing.

Si ya comprobaron que no funciona el MSDTC, la siguiente información les ayudará a encontrar el problema. Para revisar la configuración se debe contemplar el como esta distribuido nuestra ambiente, esto es si el BTS y el SQL están instalados en la misma máquina o en distintas. Aunque en nuestro laboratorio esta instalado todo en una sola máquina, incluyo la revisión de ambos ambientes, tanto el local como el distribuido:









1. Local. Esto significa que tenemos BTS y SQL en la misma máquina y para esto solo revisaremos que la configuración de MSDTC este correcta. Por default tanto en Windows 2003 como en el SP1, esta configuración esta deshabilitada por cuestiones de seguridad, por lo que hay que activarla.












Pasos:
a. Click Start, luego Administrative Tools, y finalmente Component services
b. Una vez en Component Services, ir a la pestaña de MSDTC y luego en Security Configuration (ver imagen) revisar que los siguientes settings estén idénticos (ver imagen).
2. Distribuido. Esto significa que BTS y SQL están instalado en distintas máquinas. También en esta configuración se debe llevar acabo el punto anterior, pero lo mas importante es revisar que el MSDTC tenga instalado el soporte de transacciones por red, ambos pasos deben ser para todas las máquinas que confirman el ambiente, las cuales pueden ser más de 2 si es que se trata de una arquitectura compleja. Por default Windows 2003 no tiene esta opción instalada. El artículo original lo pueden encontrar aquí. Este artículo contiene una liga por si necesitan configurar el MSDTC en un cluster de Windows 2003.




















Pasos:
a. Click Start, luego Control Panel, luego Add/Remove Programs y luego Add/Remove Windows Components.
b. En Windows Componentes Wizard dar doble click en Application Server (ver imagen).
c. Activar la opción de Enable network DTC access y dar click OK, Next, Finish (ver imagen).
d. Se debe Reiniciar el servicio el servicio de Distribuited Transaction coordinator. Para  esto existen varias formas, así que les explicare cada una de ellas:












i. Con línea de comando con 2 instrucciones en este orden: 
                  net stop msdtc y net start msdtc
ii.










Otra forma con más clicks es:
1. Click en Start, luego Administrative Tools y luego Services
2. En Services, buscar por nombre Distributed Transaction Coordinator y con click derecho ir a la opción de Restart y dar click sobre la opción (ver imagen).

Aprovechando que estamos en esta pantalla, para ver como es que obtuvimos el nombre(msdtc) para ejecutar el comando en la opción a, dando doble click sobre el servicio de Distribuited Transaction Coordinator para acceder a las propiedades, en la pestaña de General localizamos Service Name y como verán es MSDTC (no es case sensitive). Pueden hacer lo mismo de ejecutar en línea de comando para iniciar o parar otros servicios, aunque habrá algunos que no podrán ser detenidos por ser servicios especiales. Si el nombre del servicio contiene espacios, deben emplear comillas para que funcione, ej. net stop "EDI Subsystem" (ver imagen).
iii. En el servidor de SQL existe una forma adicional para reiniciar el servicio que es por medio del SQL Server Service Manager. Por medio del botón de Stop y Start (ver imagen).
e. También se deben reiniciar los sistemas/app/DB que soporten transacciones, como lo es el servicio de SQL y el Microsoft Message Queuing si es que esta instalado.


Por último, pueden existir elementos de seguridad que necesitan ser revisados debido primordialmente a las actualización del SO, como los con los SP. Les adjunto una serie de ligas que les pueden ayudar a revisar algunos detalles importantes si es que el MSDTC sigue sin funcionar.



  • New DTC Functionality in Windows Server 2003 Service Pack 1, aquí.
  • You receive an "A Microsoft Distributed Transaction Coordinator problem prevented connection to the Configuration database" error message when you publish assemblies from BizTalk Server 2004, click aquí.

Ver:



Comments (0)

Skip to main content