Integration Services-TransaktionenIntegration Services Transactions

Pakete verwenden Transaktionen, um die von Tasks ausgeführten Datenbankaktionen in unteilbare Einheiten einzubinden und somit die Integrität der Daten zu erhalten.Packages use transactions to bind the database actions that tasks perform into atomic units, and by doing this maintain data integrity. Alle MicrosoftMicrosoft Integration ServicesIntegration Services -Containertypen – Pakete, For-Schleifen-Container, Foreach-Schleifen-Container und Sequenzcontainer sowie die Taskhosts, die die einzelnen Tasks kapseln – können so konfiguriert werden, dass sie Transaktionen verwenden.All MicrosoftMicrosoft Integration ServicesIntegration Services container types—packages, the For Loop, Foreach Loop, and Sequence containers, and the task hosts that encapsulate each task—can be configured to use transactions. Integration ServicesIntegration Services stellt für das Konfigurieren von Transaktionen drei Optionen bereit: NotSupported, Supportedund Required. provides three options for configuring transactions: NotSupported, Supported, and Required.

  • Required bedeutet, dass der Container eine Transaktion startet, es sei denn, eine andere Transaktion ist bereits durch den übergeordneten Container gestartet worden.Required indicates that the container starts a transaction, unless one is already started by its parent container. Wenn bereits eine Transaktion vorhanden ist, nimmt der Container an dieser Transaktion teil.If a transaction already exists, the container joins the transaction. Wenn beispielsweise ein Paket, für das die Unterstützung von Transaktionen nicht konfiguriert wurde, einen Sequenzcontainer enthält, der die Option Required verwendet, startet der Sequenzcontainer eine eigene Transaktion.For example, if a package that is not configured to support transactions includes a Sequence container that uses the Required option, the Sequence container would start its own transaction. Wenn das Paket jedoch mit der Option Required konfiguriert wurde, nimmt der Sequenzcontainer an der Pakettransaktion teil.If the package were configured to use the Required option, the Sequence container would join the package transaction.

  • Supported bedeutet, dass der Container keine Transaktion startet, sondern an der durch den übergeordneten Container gestarteten Transaktion teilnimmt.Supported indicates that the container does not start a transaction, but joins any transaction started by its parent container. Wenn beispielsweise ein Paket mit vier SQL ausführen-Tasks eine Transaktion startet und alle vier Tasks die Option Supported verwenden, wird für die entsprechenden Datenbankaktualisierungen ein Rollback ausgeführt, wenn einer der Tasks einen Fehler auslöst.For example, if a package with four Execute SQL tasks starts a transaction and all four tasks use the Supported option, the database updates performed by the Execute SQL tasks are rolled back if any task fails. Wenn das Paket keine Transaktion startet, sind die vier SQL ausführen-Tasks nicht durch eine Transaktion gebunden, und das Rollback wird lediglich für den fehlgeschlagenen Task ausgeführt.If the package does not start a transaction, the four Execute SQL tasks are not bound by a transaction, and no database updates except the ones performed by the failed task are rolled back.

  • NotSupported bedeutet, dass der Container keine Transaktion startet, und auch an keiner vorhandenen Transaktion teilnimmt.NotSupported indicates that the container does not start a transaction or join an existing transaction. Eine von einem übergeordneten Container gestartete Transaktion hat keine Auswirkung auf untergeordnete Container, deren Konfiguration keine Transaktionen zulässt.A transaction started by a parent container does not affect child containers that have been configured to not support transactions. Wenn ein Paket beispielsweise so konfiguriert ist, dass es eine Transaktion startet, und ein For-Schleifen-Container des Pakets die Option NotSupported verwendet, kann für keinen der Tasks in der For-Schleife ein Rollback ausgeführt werden, falls ein Fehler auftritt.For example, if a package is configured to start a transaction and a For Loop container in the package uses the NotSupported option, none of the tasks in the For Loop can roll back if they fail.

    Sie konfigurieren Transaktionen, indem Sie für den Container die TransactionOption-Eigenschaft festlegen.You configure transactions by setting the TransactionOption property on the container. Diese Eigenschaft können Sie mithilfe des Fensters Eigenschaften in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT)oder programmgesteuert festlegen.You can set this property by using the Properties window in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), or you can set the property programmatically.

Hinweis

Mit der TransactionOption -Eigenschaft wird festgelegt, ob der von einem Container angeforderte Wert der IsolationLevel -Eigenschaft angewendet wird.The TransactionOption property influences whether or not the value of the IsolationLevel property requested by a container is applied. Weitere Informationen finden Sie in der Beschreibung der IsolationLevel -Eigenschaft im Thema Festlegen von Paketeigenschaften.For more information, see the description of the IsolationLevel property in the topic, Setting Package Properties.

Konfigurieren eines Pakets für die Verwendung von TransaktionenConfigure a package to use transactions

Beim Konfigurieren eines Pakets zur Verwendung von Transaktionen stehen zwei Optionen zur Verfügung:When you configure a package to use transactions, you have two options:

  • Eine einzelne Transaktion für das Paket.Have a single transaction for the package. In diesem Fall wird diese Transaktion durch das Paket selbst initiiert , während einzelne Tasks und Container des Pakets an dieser einzelnen Transaktion beteiligt sind.In this case, it is the package itself that initiates this transaction, whereas individual tasks and containers in the package participate in this single transaction.

  • Mehrere Transaktionen im Paket.Have multiple transactions in the package. In diesem Fall unterstützt das Paket Transaktionen, die Transaktionen werden jedoch tatsächlich von einzelnen Tasks und Containern im Paket initiiert.In this case, the package supports transactions, but individual tasks and containers in the package actually initiate the transactions.

    Im Folgenden wird beschrieben, wie beide Optionen konfiguriert werden.The following procedures describe how to configure both options.

Konfigurieren eines Pakets zur Verwendung einer einzelnen TransaktionConfigure a package to use a single transaction

Mit dieser Option initiiert das Paket selbst eine einzelne Transaktion.In this option, the package itself initiates a single transaction. Um das Paket zum Initiieren dieser Transaktion zu konfigurieren, legen Sie die TransactionOption-Eigenschaft auf Requiredfest.You configure the package to initiate this transaction by setting the TransactionOption property of the package to Required.

Danach tragen Sie bestimmte Tasks und Container in dieser einzelnen Transaktion ein.Next, you enlist specific tasks and containers in this single transaction. Zum Eintragen eines Tasks oder Containers in einer Transaktion legen Sie die TransactionOption-Eigenschaft dieses Tasks oder Containers auf Supportedfest.To enlist a task or container in a transaction, you set the TransactionOption property of that task or container to Supported.

  1. Öffnen Sie in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT)das Integration ServicesIntegration Services -Projekt mit dem Paket, für das Sie die Verwendung einer Transaktion konfigurieren möchten.In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services project that contains the package you want to configure to use a transaction.

  2. Doppelklicken Sie im Projektmappen-Explorer auf das Paket, um es zu öffnen.In Solution Explorer, double-click the package to open it.

  3. Klicken Sie auf die Registerkarte Ablaufsteuerung .Click the Control Flow tab.

  4. Klicken Sie mit der rechten Maustaste an einer beliebigen Stelle im Hintergrund der Entwurfsoberfläche der Ablaufsteuerung, und klicken Sie anschließend auf Eigenschaften.Right-click anywhere in the background of the control flow design surface, and then click Properties.

  5. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Requiredfest.In the Properties window, set the TransactionOption property to Required.

  6. Klicken Sie auf der Entwurfsoberfläche der Registerkarte Ablaufsteuerung mit der rechten Maustaste auf den Task oder den Container, für den Sie die Transaktion registrieren möchten, und klicken Sie auf Eigenschaften.On the design surface of the ControlFlow tab, right-click the task or the container that you want to enroll in the transaction, and then click Properties.

  7. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Supportedfest.In the Properties window, set the TransactionOption property to Supported.

    Hinweis

    Um eine Verbindung in einer Transaktion einzutragen, registrieren Sie die Tasks, die die Verbindung verwenden, für die Transaktion.To enlist a connection in a transaction, enroll the tasks that use the connection in the transaction. Weitere Informationen finden Sie unter Integration Services-Verbindungen (SSIS).For more information, see Integration Services (SSIS) Connections.

  8. Wiederholen Sie die Schritte 6 und 7 für alle Tasks und Container, für die Sie die Transaktion registrieren möchten.Repeat steps 6 and 7 for each task and container that you want to enroll in the transaction.

Konfigurieren eines Pakets zur Verwendung mehrerer TransaktionenConfigure a package to use multiple transactions

Mit dieser Option unterstützt das Paket selbst Transaktionen, startet jedoch keine Transaktion.In this option, the package itself supports transactions but does not start a transaction. Um das Paket zur Unterstützung dieser Transaktion zu konfigurieren, legen Sie die TransactionOption-Eigenschaft auf Supportedfest.You configure the package to support transactions by setting the TransactionOption property of the package to Supported.

Danach konfigurieren Sie die gewünschten Tasks und Container im Paket, um Transaktionen zu initiieren oder an Transaktionen teilzunehmen.Next, you configure the desired tasks and containers inside the package to initiate or participate in transactions. Zum Konfigurieren eines Tasks oder Containers zum Initiieren einer Transaktion legen Sie die TransactionOption-Eigenschaft dieses Tasks oder Containers auf Requiredfest.To configure a task or container to initiate a transaction, you set the TransactionOption property of that task or container to Required.

  1. Öffnen Sie in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT)das Integration ServicesIntegration Services -Projekt mit dem Paket, das Sie für die Verwendung von Transaktionen konfigurieren möchten.In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), open the Integration ServicesIntegration Services project that contains the package you want to configure to use transaction.s

  2. Doppelklicken Sie im Projektmappen-Explorer auf das Paket, um es zu öffnen.In Solution Explorer, double-click the package to open it.

  3. Klicken Sie auf die Registerkarte Ablaufsteuerung .Click the Control Flow tab.

  4. Klicken Sie mit der rechten Maustaste an einer beliebigen Stelle im Hintergrund der Entwurfsoberfläche der Ablaufsteuerung, und klicken Sie anschließend auf Eigenschaften.Right-click anywhere in the background of the control flow design surface, and then click Properties.

  5. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Supportedfest.In the Properties window, set the TransactionOption property to Supported.

    Hinweis

    Das Paket unterstützt Transaktionen, aber die Transaktionen werden von Tasks oder Containern im Paket gestartet.The package supports transactions, but the transactions are started by task or containers in the package.

  6. Klicken Sie auf der Entwurfsoberfläche der Registerkarte Ablaufsteuerung mit der rechten Maustaste auf den Task oder den Container im Paket, für den Sie eine Transaktion starten möchten, und klicken Sie auf Eigenschaften.On the design surface of the ControlFlow tab, right-click the task or the container in the package for which you want to start a transaction, and then click Properties.

  7. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Requiredfest.In the Properties window, set the TransactionOption property to Required.

  8. Wenn eine Transaktion von einem Container gestartet wird, klicken Sie mit der rechten Maustaste auf den Task oder den Container, für den Sie die Transaktion registrieren möchten, und klicken Sie auf Eigenschaften.If a transaction is started by a container, right-click the task or the container that you want to enroll in the transaction, and then click Properties.

  9. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Supportedfest.In the Properties window, set the TransactionOption property to Supported.

    Hinweis

    Um eine Verbindung in einer Transaktion einzutragen, registrieren Sie die Tasks, die die Verbindung verwenden, für die Transaktion.To enlist a connection in a transaction, enroll the tasks that use the connection in the transaction. Weitere Informationen finden Sie unter Integration Services-Verbindungen (SSIS).For more information, see Integration Services (SSIS) Connections.

  10. Wiederholen Sie die Schritte 6 bis 9 für alle Tasks und Container, die eine Transaktion initiieren.Repeat steps 6 through 9 for each task and container that starts a transaction.

Mehrere Transaktionen in einem PaketMultiple transactions in a package

Es ist möglich, dass ein Paket nicht miteinander verbundene Transaktionen in einem Integration ServicesIntegration Services -Paket enthält.It is possible for a package to include unrelated transactions in an Integration ServicesIntegration Services package. Immer wenn ein Container in der Mitte einer geschachtelten Hierarchie von Containern keine Transaktionen unterstützt, starten die Container, die sich in der Hierarchie oberhalb oder unterhalb des Containers befinden, separate Transaktionen, wenn sie für die Unterstützung von Transaktionen konfiguriert sind.Any time a container in the middle of a nested container hierarchy does not support transactions, the containers above or below it in the hierarchy start separate transactions if they are configured to support transactions. Die Transaktionen führen einen Commit oder Rollback aus, und zwar nacheinander und beginnend beim innersten Task innerhalb der geschachtelten Containerhierarchie bis zum Paket.The transactions commit or roll back in order from the innermost task in the nested container hierarchy to the package. Nachdem die innere Transaktion einen Commit ausgeführt hat, erfolgt jedoch kein Rollback, wenn eine äußere Transaktion abgebrochen wird.However, after the inner transaction commits, it does not roll back if an outer transaction is aborted.

Beispiel für mehrere Transaktionen in einem PaketExample of multiple transactions in a package

Ein Paket enthält z. B. einen Sequenzcontainer, der zwei Foreach-Schleifencontainer enthält, und jeder Container enthält zwei SQL Ausführen-Tasks.For example, a package has a Sequence container that holds two Foreach Loop containers, and each container include two Execute SQL tasks. Der Sequenzcontainer und die Execute SQL-Tasks unterstützen Transaktionen, die Foreach-Schleifencontainer hingegen nicht.The Sequence container supports transactions, the Foreach Loop containers do not, and the Execute SQL tasks do. In diesem Beispiel startet jeder Execute SQL-Task seine eigene Transaktion und führt keinen Rollback aus, wenn die Transaktion auf dem Sequenztask abgebrochen wurde.In this example, each Execute SQL task would start its own transaction and would not roll back if the transaction on the Sequence task was aborted.

Die TransactionOption-Eigenschaften des Sequenzcontainers, der Foreach-Schleifencontainer und die Tasks „SQL ausführen“ sind folgendermaßen festgelegt:The TransactionOption properties of the Sequence container, Foreach Loop container and the Execute SQL tasks are set as follows:

  • Die TransactionOption-Eigenschaft des Sequenzcontainers ist auf Requiredfestgelegt.The TransactionOption property of the Sequence container is set to Required.

  • Die TransactionOption-Eigenschaften der Foreach-Schleifencontainer sind auf NotSupportedfestgelegt.The TransactionOption properties of the Foreach Loop containers are set to NotSupported.

  • Die TransactionOption-Eigenschaften der Tasks „SQL ausführen“ sind auf Requiredfestgelegt.The TransactionOption properties of the Execute SQL tasks are set to Required.

    Das folgende Diagramm zeigt die fünf nicht miteinander verbundenen Transaktionen im Paket.The following diagram shows the five unrelated transactions in the package. Eine Transaktion wird durch den Sequenzcontainer gestartet, und vier Transaktionen werden durch die SQL Ausführen-Tasks gestartet.One transaction is started by the Sequence container and four transactions are started by the Execute SQL tasks.

    Implementierung von mehreren TransaktionenImplementation of multiple transactions

Vererbte TransaktionenInherited transactions

Ein Paket kann mithilfe des Tasks "Paket ausführen" ein anderes Paket ausführen.A package can run another package by using the Execute Package task. Das untergeordnete Paket, d. h. das von dem Task Paket ausführen ausgeführte Paket, kann seine eigene Pakettransaktion erstellen oder aber die Pakettransaktion des übergeordneten Pakets erben.The child package, which is the package run by the Execute Package task, may create its own package transaction, or it may inherit the parent package transaction.

Ein untergeordnetes Paket erbt die übergeordnete Pakettransaktion, wenn die beiden folgenden Bedingungen erfüllt sind:A child package inherits the parent package transaction if both of the following are true:

  • Das Paket wird durch einen Task Paket ausführen aufgerufen.The package is invoked by an Execute Package task.

  • Der Task Paket ausführen, der das Paket aufgerufen hat, nimmt ebenfalls an der übergeordneten Pakettransaktion teil.The Execute Package task that invoked the package also joined the parent package transaction.

    Container und Tasks des untergeordneten Pakets können nicht an der übergeordneten Pakettransaktion teilnehmen, es sei denn, das untergeordnete Paket nimmt selbst an der Transaktion teil.Containers and tasks in the child package cannot join the parent package transaction unless the child package itself joins the transaction.

Beispiel für geerbte TransaktionenExample of inherited transactions

Im folgenden Diagramm sind drei Pakete zu sehen, die Transaktionen verwenden.In the following diagram, there are three packages that all use transactions. Jedes Paket enthält zahlreiche Tasks.Each package contains multiple tasks. Um das Verhalten der Transaktionen zu verdeutlichen, werden nur die Tasks Paket ausführen gezeigt.To emphasize the behavior of the transactions, only the Execute Package tasks are shown. Das Paket A führt die Pakete B und C aus. Das Paket B wiederum führt die Pakete D und E aus, und das Paket C führt das Paket F aus.Package A runs packages B and C. In turn, package B runs packages D and E, and package C runs package F.

Die Pakete und Tasks besitzen die folgenden Transaktionsattribute:Packages and tasks have the following transaction attributes:

  • TransactionOption ist für die Pakete A und C auf Required festgelegt.TransactionOption is set to Required on packages A and C

  • TransactionOption ist für die Pakete B und D sowie für die Tasks Paket ausführen B, Paket ausführen D und Paket ausführen F auf Supported festgelegt.TransactionOption is set to Supported on packages B and D, and on the tasks Execute Package B, Execute Package D, and Execute Package F.

  • TransactionOption ist für das Paket E sowie für die Tasks Paket ausführen C und Paket ausführen E auf NotSupported festgelegt.TransactionOption is set to NotSupported on package E, and on the tasks Execute Package C and Execute Package E.

    Fluss von geerbten TransaktionenFlow of inherited transactions

    Nur die Pakete B, D und F können Transaktionen von ihren übergeordneten Paketen erben.Only packages B, D, and F can inherit transactions from their parent packages.

    Die Pakete B und D erben die Transaktion, die von Paket A gestartet wurde.Packages B and D inherit the transaction that was started by package A.

    Das Paket F erbt die Transaktion, die von Paket C gestartet wurde.Package F inherits the transaction that was started by package C.

    Die Pakete A und C steuern ihre eigenen Transaktionen.Packages A and C control their own transactions.

    Das Paket E verwendet keine Transaktionen.Package E does not use transactions.

Externe RessourcenExternal Resources

Weitere Informationen finden Sie unterSee Also

Vererbte Transaktionen Inherited Transactions
Mehrere TransaktionenMultiple Transactions