Namenskonvention für SSIS-Tasks — damit das Ausführungsprotokoll endlich lesbar ist

Ein SSIS-Paket schlägt fehl, du öffnest das Ausführungsprotokoll, um die Ursache zu finden — und stehst vor einer Baumstruktur, in der die Tasks nicht in der Reihenfolge ihrer Ausführung stehen, sondern alphabetisch nach Namen. Bei komplexen Paketen wird dieses Protokoll schlicht unlesbar. Die gute Nachricht: Eine durchdachte Namenskonvention löst das Problem vollständig — ganz ohne Code.

Das Wichtigste vorab:

  • Das Problem: SSIS protokolliert Tasks alphabetisch nach Task-Namen je Container, nicht in Ausführungsreihenfolge — im Reiter Progress wie auch in den Integration-Services-Catalog-Reports.
  • Nummerierung als Präfix bringt die Tasks im Protokoll in ihre echte Ausführungsreihenfolge.
  • Typ-Präfix (DFTSQLSCR, …) macht den Task-Typ im rein textuellen Protokoll erkennbar.
  • Sprechender Name + die Gesamt-Syntax XXXX [YYYY] ZZZ Name machen jeden Task-Namen eindeutig und selbsterklärend.
  • SSIS heute läuft über die VS-2022/2026-Extension — die Konvention bleibt gültig, und ihr Prinzip überträgt sich auf moderne ETL-Tools (Azure Data Factory, Fabric, dbt, Airflow).

Voraussetzung: ein SSIS-Projekt in Visual Studio (mit der SQL Server Integration Services Projects-Extension). Die Screenshots stammen aus Visual Studio 2017; die Konvention gilt versionsunabhängig.

Warum SSIS-Tasks eine Namenskonvention brauchen

Die Festlegung von Programmierrichtlinien und Namenskonventionen ergibt nur dann Sinn, wenn sie gewinnbringend eingesetzt werden können. Voraussetzung dafür ist, dass die Vorteile klar benannt werden können. Lesbarkeit und Wartbarkeit von Code stehen meist im Vordergrund. Im Falle von SQL Server Integration Services (SSIS) kommt jedoch noch ein weiterer Aspekt hinzu: die Protokollierung der Ausführung eines Paketes in dem Reiter Execution Results bzw. Progress in der Entwicklungsumgebung Visual Studio. Die Ausführung wird in einer Baumstruktur protokolliert. Bei komplexen Paketen mit Unterpaketen, For Each Loop Containern, Sequence Containern etc. wird die Baumstruktur schnell lang und tief. Es ist schwer, die Ausführungsreihenfolge der Tasks in der Baumstruktur nachzuvollziehen und im Fehlerfall die Fehlerursache schnell zu identifizieren. Wer ist nicht schon an dieser vermeintlich einfachen Aufgabe verzweifelt?!

Ursächlich hierfür ist aber nicht die Komplexität eines Paketes oder die Schachtelungstiefe. SSIS zeigt die ausgeführten Tasks nicht in der Reihenfolge der Ausführung an. Die Anordnung von ausgeführten Tasks in der Baumstruktur erfolgt in alphabetischer Reihenfolge der Task-Namen je Container.

Der nachfolgende Screenshot zeigt einen vermeintlich übersichtlichen Control Flow nach einer Ausführung in Visual Studio 2017:

Control-Flow-Diagramm in Visual Studio mit zwei Sequence-Containern, deren Namen die tatsächliche Ausführungsreihenfolge nicht widerspiegeln.

Zu beachten sind hier:

  • Die Namen der Sequence Container sind so gewählt, dass der Container mit dem Suffix 2 vor dem Container mit dem Suffix 1 ausgeführt wird.
  • Innerhalb der Sequence Container sind die enthaltenen Control Flow Tasks so benannt, dass die Tasks mit dem Präfix 2 vor den Tasks mit dem Präfix 1 ausgeführt werden.
  • Zwischen den beiden Sequence Containern werden 3 Skript Tasks ausgeführt, die durch die Präfixe CB und A entgegen der Ausführungsreihenfolge benannt sind.

Die beiden Data Flows enthalten identische Data Flow Tasks. Die Tasks sind so benannt, dass sie entgegen der alphabetischen Sortierung nach dem Task-Namen ausgeführt werden. Zuerst wird die Task OLE-DB Source ausgeführt und danach erst die Task Count.

Zwei Data Flows mit identischen Tasks, deren Namen der tatsächlichen Ausführungsreihenfolge widersprechen — zuerst läuft OLE-DB Source, dann Count.

Die Ausführung der Control und Data Flow Tasks wird in dem Reiter Progress des ausgeführten Paketes nicht in der Reihenfolge der tatsächlichen Ausführung, sondern in der Reihenfolge der alphabetischen Sortierung der Task-Namen je Container protokolliert:

Reiter Progress in Visual Studio: Die Tasks sind alphabetisch nach Namen sortiert, nicht in der Reihenfolge ihrer Ausführung.

Bei umfangreichen und komplexen Transformationsprozessen ist dieses Ausführungsprotokoll schlicht unlesbar. Warum Microsoft diese Systematik gewählt hat, ist nicht nachvollziehbar. Nun sind die gezeigten Screenshots bzw. die gewonnenen Erkenntnisse eher für die Entwicklung von SSIS Paketen relevant. Wie sieht es im Betrieb von SSIS Solutions aus, wenn diese in dem Integration Services Catalogs bereitgestellt und ausgeführt werden? Das Ausführungsprotokoll eines im Integration Services Catalogs bereitgestellten Paketes kann über die Standard-Berichte

Rechtsklick auf Projekt/Paket > Reports | Standard Reports | All Executions

aufgerufen werden. Und tatsächlich wird auch hier die Ausführung von Tasks nicht entsprechend der tatsächlichen Ausführungsreihenfolge protokolliert:

Integration-Services-Catalog-Standardbericht „All Executions": Auch im Betrieb werden die Tasks nach Namen statt nach Ausführungsreihenfolge protokolliert.

Aus den gewonnenen Erkenntnissen ergibt sich die Forderung nach einer Benennung von Tasks, die eine korrekte – der Reihenfolge der Ausführung von Tasks entsprechende – Protokollierung von Tasks sicherstellt. Es gibt zwei weitere weit verbreitete Namenskonventionen, die die Lesbarkeit von Paketen sowohl zur Entwurfszeit aber auch die Lesbarkeit des Protokolls zur Laufzeit erhöhen.

  • Nummerierung aller Tasks entsprechend der Ausführungsreihenfolge
  • Präfix für jeden Task-Typ
  • Task-Name beschreibt das, was die Task macht

Nummerierung aller Tasks entsprechend der Ausführungsreihenfolge

Bei der Nummerierung von Tasks ist zwischen der Nummerierung von Control Flow Tasks und Data Flow Tasks zu unterscheiden.

Control Flow Tasks

Alle Tasks sollten über eine aufsteigende Nummerierung als Präfix verfügen, die in aufsteigender Reihenfolge der Ausführungsreihenfolge entspricht. Die Nummerierung sollte einen vierstelligen Nummernkreis unterstützen (also Nummern bis mindestens 9999) und bei kleineren Zahlen führende Nullen aufweisen. Die Nummerierung sollte keineswegs geschlossen sein, also noch Lücken aufweisen, damit die Reihenfolge der Ausführung durch Änderung der Nummerierung einfach geändert werden kann. Natürlich ist die Nummerierung von Tasks mit Aufwand verbunden. Aus der Erfahrung aus Mehrentwicklerprojekten kann ich aber berichten, dass diese Namenskonvention weithin akzeptiert und auch gewinnbringend angewandt wurde.

Control Flow mit numerierten Task-Präfixen (vierstellig, mit Lücken), die der Ausführungsreihenfolge entsprechen.

Das folgende Ausführungsprotokoll listet die Tasks in der Reihenfolge ihrer Ausführung auf und ist damit ungleich lesbarer als die erste Version:

Ausführungsprotokoll nach Einführung der Nummerierung: Die Tasks erscheinen jetzt in Ausführungsreihenfolge und sind lesbar.

Data Flow Tasks

In dem normalen Ausführungsplan sind Data Flow Tasks nicht enthalten. Trotzdem ist es ratsam die oben beschriebene Systematik der Benennung von Tasks auch in Data Flows beizubehalten bzw. sogar noch zu erweitern:

Data Flow mit zweiteiliger Nummerierung als Präfix jeder Task: Control-Flow-Nummer plus Data-Flow-Nummer.

Die erste ausgeführte Data Flow Task hat als Präfix die Nummer 0110. Dieses Präfix ist für alle Data Flow Tasks zu verwenden gefolgt von einer weiteren Nummer, um die Tasks in dem Data Flow eindeutig identifizieren zu können. Damit werden jedem Data Flow Task-Namen zwei Nummern vorangestellt.

  • Control Flow Nummer
  • Data Flow Nummer

Im Fehlerfall wird schließlich auch der Task-Name der Data Flow Task protokolliert, die einen Fehler verursacht hat. Die Vergabe eindeutiger Nummern ermöglicht eine zweifelsfreie und vor allem schnelle Identifikation der Fehler verursachenden Task:

Fehlerfall: Das Protokoll nennt den eindeutigen Namen der Data-Flow-Task, die den Fehler verursacht hat.

Präfix für jeden Typ einer Task

Jeder Task-Typ verfügt in Visual Studio über ein eigenes Piktogramm. Der stilisierten Darstellung von Task-Typen sind aber aufgrund der verfügbaren Größe der Piktogramme Grenzen gesetzt. Zudem handelt es sich hier um eine visuelle Darstellung, die in dem Ausführungsprotokoll nicht zur Verfügung steht. Die Unterscheidung der Tasks in dem Reiter Execution Results bzw. Progress erfordert daher eine Kennzeichnung über ein Präfix, das den Typ der Task identifiziert.

Um die Lesbarkeit zu erhöhen ist daher allgemein anerkannt, den Task-Namen in Abhängigkeit von dem Task-Typ ein Präfix bzw. eine Abkürzung voranzustellen:

  • DFT für Data Flow Task
  • SCT für Script Task
  • SQL für SQL Execute Task

Im Internet findet man einige Vorschläge für diese Präfixe. In den folgenden beiden Listen habe ich die von mir verwendeten Task Präfixen zusammengetragen:

Präfixe für Control Flow Tasks

TaskPräfix
Back Up Database TaskBACKUP
CDC Control TaskCDC
Check Database Integrity TaskCHECKDB
Data Profiling TaskDPT
Execute SQL Server Agent Job TaskAGENT
Execute T-SQL Statement TaskTSQL
History Cleanup TaskHISTCT
Maintenance Cleanup TaskMAINCT
Notify Operator TaskNOT
Rebuild Index TaskREBIT
Reorganize Index TaskREOIT
Shrink Database TaskSHRINKDB
Update Statistics TaskSTAT
For Loop ContainerFLC
Foreach Loop ContainerFELC
Sequence ContainerSEQC
ActiveX ScriptAXS
Analysis Services Execute DDL TaskASE
Analysis Services Processing TaskASP
Bulk Insert TaskBLK
Data Flow TaskDFT
Data Mining Query TaskDMQ
Execute Package TaskEPT
Execute Process TaskEPR
Execute SQL TaskSQL
Expression TaskEXPR
File System TaskFSYS
FTP TaskFTP
Message Queue TaskMSMQ
Script TaskSCR
Send Mail TaskSMT
Transfer Database TaskTDB
Transfer Error Messages TaskTEM
Transfer Jobs TaskTJT
Transfer Logins TaskTLT
Transfer Master Stored Procedures TaskTSP
Transfer SQL Server Objects TaskTSO
Web Service TaskWST
WMI Data Reader TaskWMID
WMI Event Watcher TaskWMIE
XML TaskXML

Präfixe für Data Flow Tasks

TaskPräfixTypeSupplier
ADO NET SourceADO_SRCSource
Azure Blob SourceAB_SRCSource
CDC SourceCDC_SRCSource
DataReader SourceDR_SRCSource
Excel SourceEX_SRCSource
Flat File SourceFF_SRCSource
HDFS File SourceHDFS_SRCSource
OData SourceODATA_SRCSource
ODBC SourceODBC_SRCSource
OLE DB SourceOLE_SRCSource
Raw File SourceRF_SRCSource
SharePoint List SourceSPL_SRCSource
XML SourceXML_SRCSource
AggregateAGGTransformation
AuditAUDTransformation
Balanced Data DistributorBDDTransformation
Cache TransformCCHTransformation
CDC SplitterCDCSTransformation
Character MapCHMTransformation
Conditional SplitCSPLTransformation
Copy ColumnCPYCTransformation
Data ConversionDCNVTransformation
Data Mining QueryDMQTransformation
Derived ColumnDERTransformation
DQS CleansingDQSCTransformation
Export ColumnEXPCTransformation
Fuzzy GroupingFZGTransformation
Fuzzy LookupFZLTransformation
Import ColumnIMPCTransformation
LookupLKPTransformation
MergeMRGTransformation
Merge JoinMRGJTransformation
MulticastMLTTransformation
OLE DB CommandCMDTransformation
Percentage SamplingPSMPTransformation
PivotPVTTransformation
Row CountCNTTransformation
Row SamplingRSMPTransformation
Script ComponentSCRTransformation
Slowly Changing DimensionSCDTransformation
SortSRTTransformation
Term ExtractionTEXTransformation
Term LookupTELTransformation
Union AllALLTransformation
UnpivotUPVTTransformation
ADO NET DestinationADO_DSTDestination
Azure Blob DestinationAB_DSTDestination
Data Mining Model TrainingDMMT_DSTDestination
Data Streaming DestinationDS_DSTDestination
DataReaderDestDR_DSTDestination
Dimension ProcessingDP_DSTDestination
Excel DestinationEX_DSTDestination
Flat File DestinationFF_DSTDestination
HDFS File DestinationHDFS_DSTDestination
ODBC DestinationODBC_DSTDestination
OLE DB DestinationOLE_DSTDestination
Partition ProcessingPP_DSTDestination
Raw File DestinationRF_DSTDestination
Recordset DestinationRS_DSTDestination
SharePoint List DestinationSPL_DSTDestination
SQL Server Compact DestinationSSC_DSTDestination
SQL Server DestinationSS_DSTDestination
Microsoft Dynamics 365 CE/CRM SourceCRM_SRCSourceKingswaySoft Software
Microsoft Dynamics 365 CE/CRM DestinationCRM_DSTDestinationKingswaySoft Software
Oracle Eloqua SourceELO_SRCSourceKingswaySoft Software
Oracle Eloqua DestinationELO_DSTDestinationKingswaySoft Software

Task-Name

Zu guter Letzt… Natürlich sollte der eigentliche Task-Name kurz und knapp das beschreiben, was die Task macht. Zum Beispiel Import Customer, Check Data Types, usw.

Namenskonvention

Innerhalb eines SSIS-Paketes sollten alle Task-Namen — unabhängig davon, ob es sich um einen Control Flow Task oder einen Data Flow Task handelt — eindeutig sein. Die folgende Namenskonvention stellt das sicher und folgt dieser Syntax:

XXXX [YYYY] ZZZ Name

mit

XXXX

  • Nummerierung der Control Flow Tasks.
  • Die Nummerierung von Control Flow Tasks sollte 4-stellig sein.
  • Bei kleinen Nummern sind führende Nullen voranzustellen.
  • Die Nummerierung sollte Lücken aufweisen, um eine nachträgliche Änderung der Reihenfolge durch Veränderung der Precedence Constraints zu vereinfachen.

YYYY

  • Nummerierung der Data Flow Tasks
  • Die Nummerierung von Data Flow Tasks enthält als Präfix immer die Nummer der Control Flow Task vom Typ Data Flow (XXXX).
  • Die Nummerierung von Data Flow Tasks sollte 4-stellig sein.
  • Bei kleinen Nummern sind führende Nullen voranzustellen.
  • Die Nummerierung sollte Lücken aufweisen, um eine nachträgliche Änderung der Reihenfolge durch Veränderung der Precedence Constraints zu vereinfachen.

ZZZ

  • Präfix, der den Typ der Control Flow oder Data Flow Task identifiziert.
  • Liste mit Präfixen (s.o.)

Name

  • Kurze und bedeutungsvolle Umschreibung dessen, was die Aufgabe der Task ist.

SSIS heute: Tooling-Update und Einordnung

Die Screenshots in diesem Artikel stammen aus Visual Studio 2017 — die Konvention selbst ist seither unverändert gültig. Geändert hat sich das Tooling: SSIS-Pakete werden heute mit der separat zu installierenden Extension SQL Server Integration Services Projects 2022+ gebaut, die Visual Studio 2022 und 2026 unterstützt und Zielversionen von SQL Server 2017 bis 2025 abdeckt. Die Reiter (Progress / Execution Results) und die Integration-Services-Catalog-Berichte sind dieselben geblieben.

Versions-Hinweis: Das hier beschriebene Verhalten — Tasks im Protokoll alphabetisch nach Namen statt in Ausführungsreihenfolge — ist langjährige Praxiserfahrung (Stand der Screenshots: Visual Studio 2017). Microsofts Dokumentation beschreibt den Progress-Tab generisch als „in execution order“. Prüfe im Zweifel kurz in deiner SSIS-Version, ob die Sortierung noch greift — am Nutzen der Konvention ändert das ohnehin nichts.

Warum „ohnehin nichts“? Die drei Bausteine wirken unabhängig von der exakten Sortierreihenfolge: Eine Nummerierung macht das Protokoll scanbar, ein Typ-Präfix macht den Task-Typ im reinen Text erkennbar, und ein eindeutiger Name erlaubt im Fehlerfall die zweifelsfreie Zuordnung — egal, wie die Einträge angeordnet sind.

Wohin sich ETL bewegt

SSIS bleibt der etablierte On-Premises-ETL-Motor und wird weiter gepflegt. Für neue Projekte verschiebt sich der Schwerpunkt aber: In der Microsoft-Welt übernehmen Azure Data Factory und Microsoft Fabric die Cloud-Orchestrierung; im Open-Source- und Postgres-Umfeld haben sich dbt (Transformation) und Apache Airflow (Orchestrierung) etabliert. Die Grundidee dieses Artikels überträgt sich direkt: Auch dort entscheidet eine konsequente Benennung von Schritten und Modellen darüber, ob ein Lauf-Protokoll lesbar bleibt.

FAQ

Warum zeigt SSIS die Tasks nicht in Ausführungsreihenfolge an?

SSIS sortiert die Tasks im Ausführungsprotokoll alphabetisch nach Task-Namen je Container — sowohl im Reiter Progress / Execution Results in Visual Studio als auch in den Berichten des Integration Services Catalogs. Die tatsächliche Ausführungsreihenfolge spielt für die Darstellung keine Rolle. Genau deshalb hilft eine Nummerierung als Präfix: Sie bringt die alphabetische Sortierung in Deckung mit der Ausführungsreihenfolge.

Wie nummeriere ich Data Flow Tasks richtig?

Jeder Data Flow Task bekommt zwei vierstellige Nummern vorangestellt: zuerst die Nummer der übergeordneten Control Flow Task vom Typ Data Flow, dann eine eigene Nummer innerhalb des Data Flows. So bleibt jeder Task auch im Fehlerprotokoll eindeutig identifizierbar. Beide Nummernkreise sollten Lücken lassen, damit sich die Reihenfolge später ohne Umbenennung aller Tasks ändern lässt.

Welches Präfix nehme ich für welchen Task-Typ?

Es gibt keine offizielle Microsoft-Vorgabe — die beiden Tabellen oben listen die verbreiteten, hier verwendeten Präfixe (DFT für Data Flow Task, SQL für Execute SQL Task, SEQC für Sequence Container usw.). Wichtig ist weniger die exakte Abkürzung als die teamweite Einheitlichkeit: Lege die Liste einmal verbindlich fest und halte dich konsequent daran.

Gilt die Konvention auch im größeren SSIS-Kontext?

Ja. Die Namenskonvention ist ein Baustein wartbarer SSIS-Lösungen neben der Protokollierung eines ETL-Prozesses, der Quellcodeverwaltung von SSIS-Paketen und der grundsätzlichen Abwägung SSIS vs. T-SQL bzw. wie viel SQL in ein SSIS-Paket gehört.