Checkpoints

Wenn innerhalb von SSIS Paketen Fehler auftreten, kann es hilfreich sein die Ausführung beim zuletzt erfolgreich ausgeführten Task wieder zu starten. Z.B. wenn einzelne Tasks innerhalb eines Paketes viel Zeit in Anspruch nehmen, wie ein FTP Task der großen Datenmengen hoch- oder runterlädt. Die Integration Services bieten hierfür Checkpoints an, um Pakete vom Fehler an erneut starten zu lassen, anstatt diese komplett neu auszuführen.

Sind Checkpoints innerhalb eines Paketes konfiguriert, werden während der Ausführung Informationen über den Ablauf in einer XML Datei gespeichert. Beim erfolgreichen Beenden des Paketes wird diese Datei wieder gelöscht und bei der nächsten Ausführung wieder neu erstellt.

Um Checkpoints innerhalb der SSIS Pakete zu verwenden, müssen 3 Parameter auf Paketebene konfiguriert werden, die direkt mit den Checkpoints in Zusammenhang stehen.

image  
Zusätzlich muss noch der Parameter FailPackageOnFailure konfiguriert werden, bei dem sich die richtigen Einstellungen aber etwas schwieriger/umfangreicher gestalten können.

imageEin relativ einfaches Paket, wie oben aufgebaut, kann nur Checkpoints erstellen, wenn bei dem Task der fehlschlägt, der Parameter FailPackageOnFailure auf True gesetzt wird. Was bei 4 Tasks vielleicht noch relativ schnell von der Hand geht.

Besser ist es, alle Tasks, für die die Checkpoint erzeugen wichtig ist, in einen Sequence Container zu verschieben. Hier reicht es dann aus den Parameter FailPackageOnFailure innerhalb des Sequence Containers auf True zu setzen.

 imageimage image

Im obigen Beispiel ist zu sehen, dass das Paket bei erneuter Ausführung nach dem fehlgeschlagenem Task startet. Möchte man dies umgehen, also die Situation herbeiführen dass das Paket da startet wo es abgebrochen ist, muss wieder der Parameter FailPackageOnFailure = True bei allen erforderlichen Tasks gesetzt werden. Ansonsten muss die Aktion die der fehlgeschlagene Task ursprünglich ausführen sollte, manuell durchgeführt werden.

In Punkto Sicherheit ist beim Umgang mit Checkpoints auch noch etwas zu beachten.

<DTS:Variable>
<
DTS:Property DTS:Name="Expression"
/>
<
DTS:Property DTS:Name="EvaluateAsExpression">0</DTS:Property
>
<
DTS:Property DTS:Name="Namespace">User</DTS:Property
>
<
DTS:Property DTS:Name="ReadOnly">0</DTS:Property
>
<
DTS:Property DTS:Name="RaiseChangedEvent">0</DTS:Property
>
<
DTS:Property DTS:Name="IncludeInDebugDump">2345</DTS:Property
>
<
DTS:VariableValue DTS:DataType="8">MeinPasswort</DTS:VariableValue
>
<
DTS:Property DTS:Name="ObjectName">Password</DTS:Property
>
<
DTS:Property DTS:Name="DTSID">
{2B274456-889B-440E-B79C-7E142E32B7AA</DTS:Property>
<
DTS:Property DTS:Name="Description"
/>
<
DTS:Property DTS:Name="CreationName"/>
</
DTS:Variable>
<
DTS:Variable>
<
DTS:Property DTS:Name="Expression"/>
<
DTS:Property DTS:Name="EvaluateAsExpression">0</DTS:Property>
<
DTS:Property DTS:Name="Namespace">User</DTS:Property>
<
DTS:Property DTS:Name="ReadOnly">0</DTS:Property>
<
DTS:Property DTS:Name="RaiseChangedEvent">0</DTS:Property>
<
DTS:Property DTS:Name="IncludeInDebugDump">2345</DTS:Property>
<
DTS:VariableValue DTS:DataType="8">MeinBenutzername</DTS:VariableValue>
<
DTS:Property DTS:Name="ObjectName">Username</DTS:Property>
<
DTS:Property DTS:Name="DTSID">{C92305B2-9E00-46FD-825E-49B4C83CD736}</DTS:Property>
<
DTS:Property DTS:Name="Description"/>
<
DTS:Property DTS:Name="CreationName"/>
</
DTS:Variable>
</
DTS:Variables>

Der oben stehende Code ist ein Auszug aus einer Checkpoint Datei. Da Checkpoints auch Variablen und deren Inhalte mit abspeichern, sollte man sich bei der Verwendung von Checkpoints auch Gedanken um die Zugriffsberechtigungen auf diese machen. Im Code sind die beiden Variablen Username und Password mit den jeweiligen Werten im Klartext zu lesen.