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:
| |||||||||||||||||||||||||
|
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: