Integration Services-Transaktionen

Gilt für:SQL Server SSIS Integration Runtime in Azure Data Factory

Pakete verwenden Transaktionen, um die von Tasks ausgeführten Datenbankaktionen in unteilbare Einheiten einzubinden und somit die Integrität der Daten zu erhalten. Alle Microsoft Integration Services-Containertypen – Pakete, For Loop-Container, Foreach Loop-Container und Sequence-Container – sowie die Taskhosts, die die einzelnen Tasks kapseln, können für die Verwendung von Transaktionen konfiguriert werden. Integration Services stellt für das Konfigurieren von Transaktionen drei Optionen bereit: NotSupported, Supportedund Required.

  • Required bedeutet, dass der Container eine Transaktion startet, es sei denn, eine andere Transaktion ist bereits durch den übergeordneten Container gestartet worden. Wenn bereits eine Transaktion vorhanden ist, nimmt der Container an dieser Transaktion teil. 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. Wenn das Paket jedoch mit der Option Required konfiguriert wurde, nimmt der Sequenzcontainer an der Pakettransaktion teil.

  • Supported bedeutet, dass der Container keine Transaktion startet, sondern an der durch den übergeordneten Container gestarteten Transaktion teilnimmt. Wenn beispielsweise ein Paket mit vier Execute SQL-Tasks eine Transaktion startet und alle vier Tasks die Option Supported verwenden, werden die von den Execute SQL-Tasks durchgeführten Datenbankaktualisierungen zurückgesetzt, wenn eine der Tasks fehlschlägt. Wenn das Paket keine Transaktion startet, sind die vier Execute-SQL-Tasks nicht an eine Transaktion gebunden, und es werden keine Datenbankaktualisierungen zurückgesetzt, außer denen, die vom fehlgeschlagenen Task durchgeführt wurden.

  • NotSupported bedeutet, dass der Container keine Transaktion startet, und auch an keiner vorhandenen Transaktion teilnimmt. Eine von einem übergeordneten Container gestartete Transaktion hat keine Auswirkung auf untergeordnete Container, deren Konfiguration keine Transaktionen zulässt. 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.

Sie konfigurieren Transaktionen, indem Sie für den Container die TransactionOption-Eigenschaft festlegen. Diese Eigenschaft können Sie mithilfe des Fensters Eigenschaften in SQL Server Data Tools (SSDT)oder programmgesteuert festlegen.

Hinweis

Mit der TransactionOption -Eigenschaft wird festgelegt, ob der von einem Container angeforderte Wert der IsolationLevel -Eigenschaft angewendet wird. Weitere Informationen finden Sie in der Beschreibung der IsolationLevel -Eigenschaft im Thema Festlegen von Paketeigenschaften.

Konfigurieren eines Pakets für die Verwendung von Transaktionen

Beim Konfigurieren eines Pakets zur Verwendung von Transaktionen stehen zwei Optionen zur Verfügung:

  • Verwenden Sie eine einzige Transaktion für das Paket. 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.

  • Fügen Sie dem Paket mehrere Transaktionen hinzu. In diesem Fall unterstützt das Paket Transaktionen, die Transaktionen werden jedoch tatsächlich von einzelnen Tasks und Containern im Paket initiiert.

Im Folgenden wird beschrieben, wie beide Optionen konfiguriert werden.

Konfigurieren Sie ein Paket für die Verwendung einer einzelnen Transaktion.

Mit dieser Option initiiert das Paket selbst eine einzelne Transaktion. Um das Paket zum Initiieren dieser Transaktion zu konfigurieren, legen Sie die TransactionOption-Eigenschaft auf Requiredfest.

Danach tragen Sie bestimmte Tasks und Container in dieser einzelnen Transaktion ein. Zum Eintragen eines Tasks oder Containers in einer Transaktion legen Sie die TransactionOption-Eigenschaft dieses Tasks oder Containers auf Supportedfest.

  1. Öffnen Sie in SQL Server Data Tools (SSDT)das Integration Services -Projekt mit dem Paket, für das Sie die Verwendung einer Transaktion konfigurieren möchten.

  2. Doppelklicken Sie im Projektmappen-Explorer auf das Paket, um es zu öffnen.

  3. Klicken Sie auf die Registerkarte Ablaufsteuerung .

  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.

  5. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Requiredfest.

  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.

  7. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Supportedfest.

    Hinweis

    Um eine Verbindung in eine Transaktion einzubinden, melden Sie die Tasks, die die Verbindung verwenden, bei der Transaktion an. Weitere Informationen finden Sie unter Integration Services-Verbindungen (SSIS).

  8. Wiederholen Sie die Schritte 6 und 7 für alle Tasks und Container, für die Sie die Transaktion registrieren möchten.

Konfigurieren eines Pakets zur Verwendung mehrerer Transaktionen

Mit dieser Option unterstützt das Paket selbst Transaktionen, startet jedoch keine Transaktion. Um das Paket zur Unterstützung dieser Transaktion zu konfigurieren, legen Sie die TransactionOption-Eigenschaft auf Supportedfest.

Danach konfigurieren Sie die gewünschten Tasks und Container im Paket, um Transaktionen zu initiieren oder an Transaktionen teilzunehmen. Zum Konfigurieren eines Tasks oder Containers zum Initiieren einer Transaktion legen Sie die TransactionOption-Eigenschaft dieses Tasks oder Containers auf Requiredfest.

  1. Öffnen Sie in SQL Server Data Tools (SSDT)das Integration Services -Projekt mit dem Paket, das Sie für die Verwendung von Transaktionen konfigurieren möchten.

  2. Doppelklicken Sie im Projektmappen-Explorer auf das Paket, um es zu öffnen.

  3. Klicken Sie auf die Registerkarte Ablaufsteuerung .

  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.

  5. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Supportedfest.

    Hinweis

    Das Paket unterstützt Transaktionen, aber die Transaktionen werden von Tasks oder Containern im Paket gestartet.

  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.

  7. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Requiredfest.

  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.

  9. Legen Sie im Fenster Eigenschaften die TransactionOption-Eigenschaft auf Supportedfest.

    Hinweis

    Um eine Verbindung in eine Transaktion einzubinden, melden Sie die Tasks, die die Verbindung verwenden, bei der Transaktion an. Weitere Informationen finden Sie unter Integration Services-Verbindungen (SSIS).

  10. Wiederholen Sie die Schritte 6 bis 9 für alle Tasks und Container, die eine Transaktion initiieren.

Mehrere Transaktionen in einem Paket

Es ist möglich, dass ein Paket nicht miteinander verbundene Transaktionen in einem Integration Services -Paket enthält. 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. Die Transaktionen führen einen Commit oder Rollback aus, und zwar nacheinander und beginnend beim innersten Task innerhalb der geschachtelten Containerhierarchie bis zum Paket. Nachdem die innere Transaktion einen Commit ausgeführt hat, erfolgt jedoch kein Rollback, wenn eine äußere Transaktion abgebrochen wird.

Beispiel für mehrere Transaktionen in einem Paket

Beispielsweise enthält ein Paket einen Sequenzcontainer, der zwei Foreach-Schleifencontainer enthält, und jeder dieser Container enthält zwei Tasks vom Typ „SQL ausführen“. Der Sequence-Container unterstützt Transaktionen, die Foreach Loop-Container unterstützen sie nicht, und die Execute SQL-Tasks unterstützen sie. 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.

Die TransactionOption-Eigenschaften des Sequenzcontainers, der Foreach-Schleifencontainer und die Tasks „SQL ausführen“ sind folgendermaßen festgelegt:

  • Die TransactionOption-Eigenschaft des Sequenzcontainers ist auf Requiredfestgelegt.

  • Die TransactionOption-Eigenschaften der Foreach-Schleifencontainer sind auf NotSupportedfestgelegt.

  • Die TransactionOption-Eigenschaften der Tasks „SQL ausführen“ sind auf Requiredfestgelegt.

Das folgende Diagramm zeigt die fünf nicht miteinander verbundenen Transaktionen im Paket. Eine Transaktion wird durch den Sequenzcontainer gestartet, und vier Transaktionen werden durch die SQL Ausführen-Tasks gestartet.

Implementierung von mehreren Transaktionen

Vererbte Transaktionen

Ein Paket kann mithilfe des Tasks "Paket ausführen" ein anderes Paket ausführen. Das untergeordnete Paket, also das Paket, das vom Task „Paket ausführen“ ausgeführt wird, kann seine eigene Pakettransaktion erstellen oder die Pakettransaktion des übergeordneten Pakets erben.

Ein untergeordnetes Paket erbt die Transaktion des übergeordneten Pakets, wenn beide der folgenden Bedingungen erfüllt sind:

  • Das Paket wird von einem Task „Paket ausführen“ aufgerufen.

  • Der Task „Paket ausführen“, der das Paket aufgerufen hat, ist auch der Transaktion des übergeordneten Pakets beigetreten.

Container und Aufgaben im untergeordneten Paket können sich der Transaktion des übergeordneten Pakets nicht anschließen, es sei denn, dass das untergeordnete Paket selbst der Transaktion beitritt.

Beispiel für geerbte Transaktionen

Im folgenden Diagramm sind drei Pakete zu sehen, die Transaktionen verwenden. Jedes Paket enthält zahlreiche Tasks. Um das Verhalten der Transaktionen zu verdeutlichen, werden nur die Aufgaben vom Typ „Paket ausführen“ dargestellt. 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.

Die Pakete und Tasks besitzen die folgenden Transaktionsattribute:

  • TransactionOption ist für die Pakete A und C auf Required festgelegt.

  • 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 ist bei Paket E sowie bei den Tasks Paket ausführen C und Paket ausführen E auf NotSupported festgelegt.

Ablauf geerbter Transaktionen

Nur die Pakete B, D und F können Transaktionen von ihren übergeordneten Paketen erben.

Die Pakete B und D erben die Transaktion, die von Paket A gestartet wurde.

Das Paket F erbt die Transaktion, die von Paket C gestartet wurde.

Die Pakete A und C steuern ihre eigenen Transaktionen.

Das Paket E verwendet keine Transaktionen.