Hoy vamos a continuar desarrollando el tema relativo al trabajo con Transacciones desde SSIS 2008 R2.
Nos habíamos quedado en que al forzar un error en la conclusión de una tarea de todas formas se produce la carga de los datos. Las propiedades FailPackageOnFailure y FailParentOnFailure nos permiten forzar la detención del paquete o de un contenedor, cuando la tarea que se ejecuta devuelve error; pero en este caso, tampoco afecta la ejecución de la carga. En todos los casos vistos hasta ahora se cargan 1008 registros a la tabla ProductosTransacciones.
Vamos a configurar las propiedades relativas a Transacciones. Comenzaremos con la tarea que provoca el error, establecemos TransactionOption = Required, así que veamos un resumen de las propiedades de la tarea con las que estamos trabajando:
En este caso, al ejecutar el paquete, ya no se cargan todos los registros, hay apenas 676, los 504 de la tarea externa al contenedor y los 172 correspondientes a los nombres cortos, porque se anulan (eliminan) los registros que fueron cargados en esta tarea.
Veamos lo que nos cuenta el log, se inicia la tarea con la validación previa de la misma y a continuación se inicia la transacción distribuida para este contenedor, que es la tarea en concreto… ocurren todos los pasos de la tarea Flujo de datos y al final se produce un error, que hemos forzado y se anula la transacción.
Vamos a ver lo que ocurre en el contenedor
Como podemos apreciar, a nivel de contenedor no hay ninguna referencia a la transacción, porque tal y como lo tenemos configurado el contenedor NO ha iniciado una transacción, se mantiene la propiedad TransactionOption = Supported, que es su valor predeterminado.
La propiedad TransactionOption = Required a nivel de tarea ha definido que se inicie una nueva transacción, algo parecido a BEGIN TRANSACTION (T-SQL) para esta tarea y que debido a un error, se reviertan los cambios producidos durante la misma, como cuando hacemos REVERT en T-SQL. Es de gran utilidad que podamos controlar el trabajo y sobre todo el buen estado de nuestros datos a través del manejo de transacciones con SSIS.
¿Qué pasaría si fuese necesario anular todas las modificaciones ocurridas dentro de un contenedor? Esto lo veremos en la siguiente entrada.