Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Se aplica a:SQL Server
SSIS Integration Runtime en Azure Data Factory
Los paquetes utilizan transacciones para enlazar las acciones de base de datos que las tareas realizan en unidades atómicas y mantener de esta forma la integridad de los datos. Todos los tipos de contenedores de Microsoft Integration Services —los contenedores Package, For Loop, Foreach Loop y Sequence—, así como los hosts de tarea que encapsulan cada tarea, se pueden configurar para usar transacciones. Integration Services proporciona tres opciones para configurar transacciones: NotSupported, Supportedy Required.
Required indica que el contenedor inicia una transacción, a menos que el contenedor principal ya haya iniciado otra. Si ya existe una transacción, el contenedor se une a la transacción. Por ejemplo, si un paquete que no está configurado para admitir transacciones, incluye un contenedor de secuencias que utiliza la opción Required , el contenedor de secuencias iniciará su propia transacción. Si el paquete se hubiera configurado para usar la opción Required, el contenedor Sequence se uniría a la transacción del paquete.
Supported indica que el contenedor no inicia una transacción, pero sí combina cualquier transacción iniciada por el contenedor principal. Por ejemplo, si un paquete con cuatro tareas Ejecutar SQL inicia una transacción y las cuatro tareas utilizan la opción Supported , las actualizaciones de la base de datos realizadas por las tareas Ejecutar SQL se revierten si se produce un error en cualquiera de las tareas. Si el paquete no inicia una transacción, las cuatro tareas Ejecutar SQL no estarán vinculadas a una transacción, y no se revertirá ninguna actualización de la base de datos, excepto las realizadas por la tarea que falló.
NotSupported indica que el contenedor no inicia una transacción ni combina una transacción existente. Una transacción iniciada por un contenedor principal no afecta a los contenedores secundarios configurados de manera que no admitan transacciones. Por ejemplo, si un paquete está configurado para iniciar una transacción y un contenedor For Loop del paquete utiliza la opción NotSupported, ninguna de las tareas del contenedor For Loop puede revertirse si se produce un error.
Para configurar transacciones, hay que establecer la propiedad TransactionOption en el contenedor. Puede establecer esta propiedad en la ventana Propiedades de SQL Server Data Tools (SSDT)o mediante programación.
Nota
La propiedad TransactionOption tiene influencia sobre el hecho de que el valor de la propiedad IsolationLevel solicitada por un contenedor se aplique o no. Para obtener más información, vea la descripción de la propiedad IsolationLevel en el tema Establecer las propiedades de paquete.
Configurar un paquete para el uso de transacciones
Cuando configura un paquete para utilizar transacciones, tiene dos opciones:
Realice una sola transacción para el paquete. En este caso, es el propio paquete el que inicia esta transacción, mientras que las tareas y contenedores individuales del paquete participan en esta transacción única.
Incluir varias transacciones en el paquete. En este caso, el paquete admite transacciones, pero las tareas y contenedores individuales del paquete inician realmente las transacciones.
El procedimiento siguiente describe cómo configurar ambas opciones.
Configurar un paquete para usar una transacción única
En esta opción, el propio paquete inicia una transacción única. Configure el paquete para iniciar esta transacción estableciendo la propiedad TransactionOption del paquete en Requerido.
A continuación, incluye tareas y contenedores específicos en esta sola transacción. Para dar de alta una tarea o un contenedor en una transacción, establezca la propiedad TransactionOption de esa tarea o contenedor en Se admite.
En SQL Server Data Tools (SSDT), abra el proyecto de Integration Services que contiene el paquete que desea configurar para usar una transacción.
En el Explorador de soluciones, haga doble clic en el paquete para abrirlo.
Haga clic en la pestaña Flujo de control .
Haga clic con el botón derecho en cualquier parte del fondo de la superficie de diseño de flujo de control y haga clic en Propiedades.
En la ventana Propiedades , establezca la propiedad TransactionOption en Requerido.
En la superficie de diseño de la pestaña Flujo de control , haga clic con el botón derecho en la tarea o contenedor que quiere inscribir en la transacción y luego haga clic en Propiedades.
En la ventana Propiedades , establezca la propiedad TransactionOption en Se admite.
Nota
Para dar de alta una conexión en una transacción, inscriba las tareas que usan la conexión en la transacción. Para obtener más información, consulte Conexiones de Integration Services (SSIS).
Repita los pasos 6 y 7 para cada tarea y contenedor que desee inscribir en la transacción.
Configurar un paquete de modo que use varias transacciones
En esta opción, el propio paquete admite las transacciones pero no inicia una transacción. Configure el paquete para admitir transacciones estableciendo la propiedad TransactionOption del paquete en Se admite.
A continuación, configure las tareas y contenedores deseados dentro del paquete para iniciar transacciones o participar en ellas. Para configurar una tarea o un contenedor para iniciar una transacción, establezca la propiedad TransactionOption de esa tarea o contenedor en Requerido.
En SQL Server Data Tools (SSDT), abra el proyecto de Servicios de integración que contiene el paquete que desea configurar para usar una transacción.
En el Explorador de soluciones, haga doble clic en el paquete para abrirlo.
Haga clic en la pestaña Flujo de control .
Haga clic con el botón derecho en cualquier parte del fondo de la superficie de diseño de flujo de control y haga clic en Propiedades.
En la ventana Propiedades , establezca la propiedad TransactionOption en Se admite.
Nota
El paquete admite transacciones, pero son las tareas o los contenedores del paquete quienes las inician.
En la superficie de diseño de la pestaña Flujo de control , haga clic con el botón derecho en la tarea o contenedor del paquete para el que quiere iniciar una transacción y luego haga clic en Propiedades.
En la ventana Propiedades , establezca la propiedad TransactionOption en Requerido.
Si contenedor inicia una transacción, haga clic con el botón derecho en la tarea o el contenedor que quiere inscribir en la transacción y luego haga clic en Propiedades.
En la ventana Propiedades , establezca la propiedad TransactionOption en Se admite.
Nota
Para dar de alta una conexión en una transacción, inscriba las tareas que usan la conexión en la transacción. Para obtener más información, consulte Conexiones de Integration Services (SSIS).
Repita los pasos 6 a 9 para cada tarea y cada contenedor que inician una transacción.
Varias transacciones en un paquete
Un paquete puede incluir transacciones no relacionadas en un paquete de Integration Services . Cuando un contenedor situado en medio de una jerarquía de contenedores anidados no admite transacciones, los contenedores situados en un nivel superior o inferior de la jerarquía inician transacciones independientes, si están configurados para admitir transacciones. Las transacciones se confirman o se revierten en orden, desde la tarea más interna en la jerarquía de contenedores anidados hasta el paquete. Sin embargo, una vez confirmada la transacción interna, no se revierte aunque se anule una transacción externa.
Ejemplo de varias transacciones en un paquete
Por ejemplo, un paquete tiene un contenedor Sequence que contiene dos contenedores Foreach Loop, y cada contenedor incluye dos tareas de ejecución de SQL. El contenedor Sequence admite transacciones, los contenedores Foreach Loop no, y las tareas Ejecutar SQL sí. En este ejemplo, cada tarea Ejecutar SQL iniciaría su propia transacción y no la revertiría si se abortara la transacción de la tarea Secuencia.
Las propiedades de TransactionOption del contenedor de secuencias, el contenedor de bucles Foreach y las tareas Ejecutar SQL se establecen de la siguiente forma:
La propiedad TransactionOption del contenedor de secuencias se establece en Required.
Las propiedades TransactionOption de los contenedores Foreach Loop están establecidas en NotSupported.
Las propiedades TransactionOption de las tareas Ejecutar SQL se establecen en Required.
En el diagrama siguiente se muestran las cinco transacciones no relacionadas del paquete. El contenedor de secuencias inicia una transacción y las tareas Ejecutar SQL inician las otras cuatro.
Transacciones heredadas
Un paquete puede ejecutar otro paquete, utilizando la tarea Ejecutar paquete. El paquete secundario, que es el que ejecuta la tarea Ejecutar paquete, puede crear su propia transacción de paquete o heredar la del paquete primario.
Un paquete secundario hereda la transacción de paquete primario si se cumplen las dos condiciones siguientes:
El paquete es invocado por una tarea "Ejecutar paquete".
La tarea Ejecutar paquete que invocó el paquete también se unió a la transacción del paquete principal.
Los contenedores y las tareas del paquete secundario no pueden unirse a la transacción del paquete principal, a menos que el propio paquete secundario se una a la transacción.
Ejemplo de transacciones heredadas
En el diagrama siguiente, hay tres paquetes que utilizan transacciones. Cada paquete contiene varias tareas. Para resaltar el comportamiento de las transacciones, solo se muestran las tareas «Ejecutar paquete». El paquete A ejecuta los paquetes B y C. A su vez, el paquete B ejecuta los paquetes D y E, y el paquete C ejecuta el paquete F.
Los paquetes y las tareas tienen los siguientes atributos de transacción:
TransactionOption se establece en Required en los paquetes A y C
TransactionOption se establece en Supported en los paquetes B y D, y en las tareas Ejecutar paquete B, Ejecutar paquete D y Ejecutar paquete F.
TransactionOption se establece en NotSupported en el paquete E y en las tareas Ejecutar paquete C y Ejecutar paquete E.
Solo los paquetes B, D y F pueden heredar transacciones de sus paquetes primarios.
Los paquetes B y D heredan la transacción iniciada por el paquete A.
El paquete F hereda la transacción iniciada por el paquete C.
Los paquetes A y C controlan sus propias transacciones.
El paquete E no utiliza transacciones.