Probleme beim Multicast in SSIS-Paketen

Bei einem SSIS-Projekt mit SQL Server 2008 R2 kam es zum folgenden Problem: Nach einer Datenquelle wurde ein Multicast verwendet, nur leider kamen keine Daten aus der Quelle beim Multicast an. Bei der Fehlersuche zeigte sich, dass Daten an der Datenquelle ankommen müssten, diese allerdings aus einem unbekannten Grund nicht weitergeleitet wurden.

Abbildung 1 Versuchsaufbau

 

Versuchsdurchführung

Um diesen Fehler nachzustellen wurde der SQL Server 2008 R2 und SQL Server 2012 verwendet. Hierfür wurde ein Paket mit dem Namen „Kind“ erstellt, welches nur einem Datenflusstask enthält. Dieses beinhaltete eine OLE DB-Datenquelle und im Anschluss daran einen Multicast (siehe Abbildung 1).  Dazwischen wurde ein Data Viewer eingebaut, um den Datenfluss zu überwachen.

In der Datenquelle wurde das folgende SQL-Statement verwendet:

SELECT 1 AS test

Beim ersten Versuch zeigte der Data Viewer allerdings den Wert 1 in der Spalte test an, also das eigentlich korrekte Verhalten (siehe Abbildung 2).

Abbildung 2 Multicast nach Datenquelle mit ankommenden Daten

 

Im zweiten Versuch wurde ein weiteres Paket mit dem Namen „Vater“ erstellt, welches nur das vorher entwickelte Paket „Kind“ aufruft. Wenn das Paket „Vater“ ausgeführt wurde, so flossen im Paket „Kind“ keine Daten zwischen der Datenquelle und dem Multicast. Der am Anfang beschriebene Fehler taucht also wieder auf (siehe Abbildung 3).

Abbildung 3 Datenfluss im Paket „Kind“ ohne Datenziel

 

Für den nächsten Test wurde eine Textdatei als Datenziel nach dem Multicast im Paket „Kind“ verwendet.  Bei der nächsten Ausführung wurde angezeigt, dass Daten zwischen der Datenquelle und dem Multicast flossen (siehe Abbildung 4).

Abbildung 4 Datenfluss im Paket „Kind“ mit Datenziel

 

Der Fehler, dass keine Daten zwischen Datenquelle und Multicast fließen, taucht also nur auf, wenn die folgenden Bedingungen erfüllt werden:

  • Das Paket mit der Datenquelle und Multicast wird durch ein anderes Paket ausgeführt
  • Nach dem Multicast kommen keine Datenquellen
  • Option im Datenfluss Task „RunInOptimizedMode“ auf True

Die Option RunInOptimizedMode dient dazu, ungenutzte Spalten, Outputs und Komponenten aus einem Datenfluss zu entfernen. Um den beschriebenen Fehler zu unterbinden, muss nur die Option „RunInOptimizedMode“ auf False gesetzt werden. 

 

Abbildung 5 Eigenschaften des Datenfluss Task

 

Sollte nun das Paket „Kind“ nochmal durch das Paket „Vater“ ausgeführt werden, ohne dass ein Datenziel nach dem Multicast angegeben wurde, so fließen nun trotzdem Daten (siehe Abbildung 6).

Abbildung 6 Datenfluss im Paket „Kind“ mit RunInOptimizedMode auf False

 

Schreibe einen Kommentar