Die Ausführung eines SSIS-Pakets reagiert nicht mehr, wenn Sie DTC-Transaktionen für ein Paket in Microsoft SQL Server

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem die Ausführung eines SSIS-Pakets (Microsoft SQL Server Integration Services) nicht mehr reagiert, wenn Sie DTC-Transaktionen für das Paket aktivieren und die ValidateExternalMetadata -Eigenschaft für eine Komponente in einem Datenflusstask aktivieren.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 2253391

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie erstellen ein SSIS-Paket in SQL Server.
  • Das SSIS-Paket enthält einen Datenflusstask und einige andere Aufgaben.
  • Die TransactionOption -Eigenschaft des SSIS-Pakets ist auf Erforderlich festgelegt, um DTC-Transaktionen zu verwenden.
  • Die anderen Tasks werden vor der Ausführung des Datenflusstasks in einer DTC-Transaktion ausgeführt.
  • Sie fügen dem Datenflusstask eine Komponente hinzu.
  • Die ValidateExternalMetadata -Eigenschaft einer Datenflusskomponente ist auf True festgelegt.
  • Der Datenflusstask enthält eine OLE DB-Zielkomponente, für die der Datenzugriffsmodus auf Tabelle oder Sicht oder auf Tabellenname oder Ansichtsname-Variable festgelegt ist.

Wenn Sie das Paket in diesem Szenario ausführen, reagiert die Ausführung nicht mehr. Wenn Sie das SSIS-Paket in Visual Studio debuggen, erhalten Sie außerdem Meldungen, die in der Statusansicht wie folgt aussehen:

SSIS-Paket "Package.dtsx" wird gestartet.

Informationen: 0x4004300A unter Datenfluss Task, DTS. Pipeline: Die Überprüfungsphase beginnt. Informationen: 0x4001100A unter Paket: Verteilte Transaktion für diesen Container wird gestartet. Informationen: 0x4004300A unter Datenfluss Task, DTS. Pipeline: Die Überprüfungsphase beginnt.

Ursache

Dieses Problem tritt auf, weil die Verbindung im Datenfluss nicht in der DTC-Transaktion registriert ist. Dadurch wird die Ausführung der sp_cursoropen gespeicherten Prozedur blockiert. Dies ist ein Entwurfsfeature, da eine Verbindung während des Überprüfungsprozesses nicht in einer DTC-Transaktion registriert werden kann. In dem szenario, das im Abschnitt Symptome beschrieben wird, wird der Validierungsprozess einer Datenflusskomponente blockiert, wenn Sie das Paket ausführen, da die Verbindung im Datenflusstask nicht für die DTC-Transaktion registriert wurde.

Lösung

Wenden Sie eine der folgenden Methoden an, um dieses Problem zu beheben:

  • Legen Sie für alle Komponenten im Datenflusstask auf False festValidateExternalMetadata.

  • Legen Sie den Datenzugriffsmodus der OLE DB-Zielkomponente auf einen der folgenden Modi fest:

    • Tabelle oder Ansicht – schnelles Laden
    • Tabellenname oder Ansichtsnamevariable – schnelles Laden
    • SQL-Befehl

Weitere Informationen

Der Tabellen- oder Sichtdatenzugriffsmodus ist blockiert, aber andere Datenzugriffsmodi werden nicht blockiert, da die verschiedenen Befehle des Datenanbieters für jeden Datenzugriffsmodus ausgegeben werden. Um weitere Details zu diesem Problem zu erhalten, verwenden Sie SQL Server Profiler, um die verschiedenen Befehle anzuzeigen, die vom Datenanbieter ausgegeben werden.