Suchen...
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Break(point)dance

Häufig bestehen SSIS-Pakete aus einem Schleifencontainer mit dem mehrere strukturgleiche Quelldateien in eine SQL-Server-Datenbank importiert werden. Da der Datentyp für die jeweilige Spalte in der Ziel-SQL-Server-Tabelle festgelegt wird, muss jeder Datensatz der Importdateien dieser Definition entsprechen, ansonsten kommt es zu Fehlern beim Importvorgang. Häufig kommt es jedoch vor, dass Datensätze aus den Quelldateien nicht dem Datentyp der Zieltabelle entsprechen. Für diese Datensätze muss der Datentyp entsprechend korrigiert werden. Allerdings liefert uns die Statusmeldung des SSIS-Pakets hier keine ausreichend ausführliche Information, welche der Quelldateien betroffen ist. In unserem neuesten Standard-SSIS-Paket, das als Grundlage in unseren Projekten dient, kann die betreffende Tabelle durch ein ausgeklügeltes Logging-Verhalten leicht identifiziert werden. In der Praxis begegnen uns jedoch oft SSIS-Pakete, die über dieses Logging-Verhalten noch nicht verfügen. Doch anstatt sich auf eine mühsame Fehlersuche innerhalb der Quelldateien einzulassen, bietet dieser Blog einen pragmatischen und deutlich einfacheren Ansatz. Nämlich die Identifikation der Datentyp-Übeltäter mit Hilfe von Breakpoints. 

In diesem Beispiel sollen zwei strukturgleiche Excel-Tabellen in eine SQL-Server-Tabelle importiert werden.  

Quelldateien

Abbildung 1 Quelldateien

Hierfür wurde ein SSIS-Paket mit einem Datenfluss-Task erstellt. Dieser befindet sich einem Schleifencontainer und lädt mit Hilfe einer Variablen die Excel-Importdateien in die Ziel-SQL-Server-Tabelle. Die Variable wird im Fenster Variablen festgelegt und enthält den Dateinamen (Bezeichnung hier: „Excel“).


Abbildung 2 SSIS-Ablaufsteuerung

Um einen Fehler zu provozieren, enthält ein Datensatz innerhalb einer der Importdateien einen falschen Datentyp. Diese Zeichenfolge entspricht nicht dem float-Datentyp der Zieltabelle.

Datensatz_mit_falschem_Datentyp
Abbildung 3 Datensatz mit falschem Datentyp

Startet man nun das SSIS-Paket kommt es, wie erwartet, zum Fehler.

Fehler_beim_Importprozess
Abbildung 4 Fehler beim Importprozess

Allerdings ist die Fehlermeldung im Status-Fenster nicht informativ genug. Es wird nicht klar, welche der Excel-Dateien betroffen ist.

Fehlermeldung_im_SSIS-Status-Fenster
Abbildung 5 Fehlermeldungen im SSIS-Status-Fenster

Um sich jetzt die betroffene Excel-Datei im SSIS-Paket anzeigen lassen zu können, sind ein paar Einstellungen notwendig. Zunächst muss man zum Datenfluss-Task einen Breakpoint hinzufügen. Dies geschieht mittels Rechtsklick auf den Task – „Breakpoints bearbeiten“:

Breakpoint-hinzufuegen
Abbildung 6 Breakpoint hinzufügen

Es muss der Breakpoint „Unterbrechen, wenn der Container das OnError-Ereignis empfängt.“ aktiviert werden: Es muss der Breakpoint „Unterbrechen, wenn der Container das OnError-Ereignis empfängt.“ aktiviert werden:

Breakpoint_festlegen
Abbildung 7 Breakpoint festlegen

Im Feld des Datenfluss-Tasks erscheint nun ein roter Punkt. Das bedeutet, dass der Breakpoint aktiv ist.

Symbol_fuer_vorhandenen_Breakpoint
Abbildung 8 Symbol für vorhandenen Breakpoint

Startet man nun das SSIS-Paket erneut, wird dieses bei einem Fehler unterbrochen und in dem roten Punkt erscheint ein Pfeil.

Achtung: Da der Debug-Modus nur für das komplette Paket funktioniert, reicht es nicht den Container einzeln auszuführen.

Im nächsten Schritt muss per Rechtsklick auf den Task eine „Überwachung“ hinzugefügt werden:

Ueberwachung_hinzufuegen
Abbildung 9 Überwachung hinzufügen

Standardmäßig ist das Überwachungsfenster deaktiviert. Dieses kann über das Menü aktiviert werden (Debuggen, Fenster, Überwachen, Überwachen 1):

Fenster_Ueberwachung_aktivieren
Abbildung 10 Fenster Überwachung aktivieren

Leeres_Ueberwachungsfenster
Abbildung 11 Leeres Überwachungsfenster

Das Fenster „Überwachen 1“ ist zunächst leer.

Es gilt die Variable „Excel“ zu überwachen, da diese vom Schleifencontainer genutzt wird und daher zu einem Zeitpunkt des Importprozesses den Dateinamen der Tabelle mit dem falschen Datentyp enthält.

Variablen
Abbildung 12 Variablen

Diese Variable muss nun per Drag-and-drop aus dem Fenster „Variablen” in das Fenster „Überwachen 1“ gezogen werden.

Ueberwachung_von_Excel-Variable

Abbildung 13 Überwachung von Excel-Variable

Nun wird uns in der Spalte „Wert“ der Dateiname der betreffenden Excel-Datei angezeigt.

Zu dem Zeitpunkt, an dem unser Breakpoint das Paket stoppt, enthält die Variable des Schleifencontainers genau den Dateinamen, in dem sich der Datensatz mit dem falschen Datentyp verbirgt. Nun haben wir den Übeltäter identifiziert und der Datentyp kann korrigiert werden.