In diesem Blogartikel „SSIS-Ablauf mit SQL-Server-Agent automatisieren“ möchten wir über den Ablauf aus unserem „Gesteuerte Workflows im SQL-Server-Agent“ Artikel gehen und analysieren, wie man den Ablauf optimieren kann.
Hier eine kurze Zusammenfassung des erwähnten Artikels:
Wir haben einen SSIS-Ablauf erstellt, der mittels Python Wetterdaten von einem FTP-Server herunterlädt, abspeichert und mittels SQL-Tasks im SSIS Ablauf eine SQL-Server Datenbank befüllt. Dieser Ablauf wird per SQL-Server-Agent stündlich automatisch ausgeführt.
Python-Skript in SSIS-Ablauf einbauen
Zuerst bauen wir das Python Skript in den SSIS-Ablauf ein. Dies führt zu mehr Troubleshooting-Potential und auch zur besseren Gesamtübersicht.
Dafür verwenden wir den „Execute Process Task“:
Mailtasks
In das Python Skript bauen wir Mailtasks ein, sodass potenzielle Fehler mittels „smtp.lib“ mit dementsprechenden Fehlermeldungen an uns gesendet werden.
Event Handler
Danach richten wir einen „Event Handler“ für das ganze Projekt für den Fall, dass beim Ausführen des Ablaufes etwas schief geht, ein. Hierfür muss man im Menü, in dem sich auch das Control Flow Menü und der Package Explorer befindet, auf „Event Handler“ klicken. Bei dem Executable-Dropdown wählen wir den Namen des ganzen Projektes aus. Im Dropdown daneben sollte normalerweise automatisch „OnError“ ausgewählt sein.
In dieser Ebene können wir, genau wie auch in der Control Flow Ebene, auf die SSIS-Toolbox zugreifen und diverse Arbeitsschritte durchführen. In unserem Fall richten wir einen „Send Mail Task“ ein, um Error-E-Mails mit brauchbarer Information zu versenden. Dafür brauchen wir aber neue Variablen.
Um alles einheitlich zu haben, stellen wir auch die alten Variablen auf Project-Parameters um. Dadurch kann man in einem großen Ablauf, der sich über mehrere SSIS-Projekts spannt, diese „Parameter“ auch verwenden. Zu bedenken gilt, dass sich die Variablen immer nur auf das Package, in dem sie definiert worden sind, beziehen.
Error-E-Mail
Für unsere Error-E-Mail brauchen wir folgende neue Parameter:
- MailSender String -> enthält die Absender-E-Mail Adresse für das Error-E-Mail.
- MailServer String -> enthält den Mail-Server, über den die E-Mails gesendet werden.
- MailReciever String -> enthält die Personen, die das Error-E-Mail erhalten sollen.
Im Event Handler befüllen wir nun den Send-Mail-Task mit unseren Parametern. Dafür gehen wir wieder in die Expressions und setzen folgende Properties mit folgenden Expressions:
Property | Expression |
FromLine | @[$Package::MailSender] |
ToLine | @[$Package::MailReciever] |
SmtpConnection | @[$Package::MailServer] |
Message Souce: „A Task in “ + @[System::PackageName] + “ failed with the following error:“+“
Error Code: „+(DT_WSTR,50) @[System::ErrorCode]+“
Error Description: „+ @[System::ErrorDescription]+“
Error Source :“+ @[System::SourceName]
Durch das Verwenden von Expressions können wir die Error-Message dynamisch erstellen. Die Infos, in welchem Packet, mit welchem Code + Beschreibung und bei welchem Task generieren wir so je nach dem aufgetretenen Fehler dynamisch.
Um die Error-E-Mail voll ausnutzen zu können, spalten wir ebenfalls die Update-Statements aus dem Insert-Skript und erstellen einen eigenen Schritt. Dies dient nicht nur für das Troubleshooten sondern auch, wie bereits erwähnt, für eine bessere Übersicht, damit ein Kollege oder Außenstehender den Ablauf erfassen kann, ohne in jeden einzelnen Schritt hineinschauen zu müssen.
Archivierung
Als nächstes Ändern wir das Archivieren der Files. Dies geschieht im Ablauf, nachdem das Einspielen in die Basis erfolgt ist. Wenn im Ablauf aber vor diesem Schritt etwas schief geht, bleiben die Files im Original-Ordner liegen, bis sie jemand händisch verschiebt.
Diese Archivierungen nehmen wir aus dem SSIS-Ablauf heraus und bauen ihn als eigenen Schritt in den SQL-Server-Agent ein. Da man bei jedem Schritt entscheiden kann, was bei einem erfolgreichen oder fehlerhaften Durchlauf passieren soll, bietet es sich an, an dieser Stelle einen Schritt zum Abfangen von Fehlschlägen einzubauen. So ist garantiert, dass unabhängig wo der Ablauf fehlschlägt, die Files ins Archiv oder in die Sicherung gespeichert werden.
Benachrichtigung
In der Vorversion gibt es keine Benachrichtigung, wenn der Ablauf vollständig durchgelaufen ist. Dies setzen wir im SSIS-Ablauf mittels eines Send-E-Mail-Tasks um. Hier wenden wir dieselben Expressions an wie bei unserem Error-E-Mail. So müssen wir nur den Text anpassen.
Fazit
Mit diesen wenigen Änderungen haben wir den Ablauf um einiges verbessert. Das Troubleshooting wird erleichtert und im extrem Fall ist nun sichergestellt, dass die Files in einem Archiv landen und nicht verloren gehen bzw. den Ablauf beim nächsten Durchlauf eventuell nicht wieder zu einem Absturz bringen.
Sollte sich die interne Umgebung öfter ändern, empfiehlt es sich auch, alle Pfade, die absolut in einen SSIS-Task hineingeschrieben wurden, ebenfalls auf Project-Parameter auszulagern. So kann man bei Server- oder Festplattenwechsel den Ablauf einfacher in der neuen Umgebung wieder zum Laufen bringen.