Die Anzahl der Neuerungen der Integration Services 2014 gegenüber 2012 ist bekanntermaßen recht überschaubar: “SQL Server 2014 Integration Services is unchanged from the previous release” lautet es unter What’s New (Integration Services). Entsprechend einfach gestaltet sich auch das Upgrade eines mit SSIS 2012 entwickelten Pakets auf SSIS 2014 – dieses geschieht quasi automatisch beim Hinzufügen eines 2012er Pakets zu einem 2014er Projekt.

Doch was, wenn der Weg auch mal zurück führen muss, wenn ein „Paketdowngrade“ von 2014 auf 2012 gewünscht ist? Wie so oft hält sich Microsoft hier an den legendären Ausspruch Erich Honeckers: „Vorwärts immer, rückwärts nimmer. (Stürmischer Beifall)“ lautet es in den Protokollen zu den Festansprachen zum 40. Jahrestag der DDR. Ein echtes Paketdowngrade wird von Hause aus nicht angeboten, ist aber über Umwege realisierbar!

Um zu ergründen was genau bei einem Upgrade von 2012 auf 2014 geschieht, und was die Unterschiede zwischen den Paketversionen sein könnten, haben wir ein einfaches 2012er Paket mit einigen SSIS Standardtasks- und Komponenten sowie Variablen und Ausdrücken ausgestattet. Hier der Kontrollfluss:

…und der Datenfluss des Pakets:

Im nächsten Schritt fügen wir das Paket einem 2014er Projekt hinzu:

Und siehe da, das automatische Upgrade des Pakets wird durchgeführt:

Visuell bestehen keine Unterschiede zwischen den Paketen, es lohnt sich daher ein Blick unter die Motorhaube, also in das XML der beiden Pakete. Vergleicht man beide XML Dateien fallen sofort einige Unterschiede zwischen den Paketen auf:

Die gefundenen Unterschiede lassen sich grob klassifizieren in:

  • Paketheaderinformationen (z.B. Versionsnummern)
  • GUIDs von Objekten im Paket und Referenzen darauf (XML Attribute „DTS:DTSID“)
  • Referenzen auf Task- oder Komponententypen (XML Attribute „DTS:CreationName“, „DTS:ExecutableType“ und „componentClassID“)
  • Layoutinformationen

Die grundsätzliche Idee ist nun, im 2014er Paket über „Suchen und Ersetzen“ die Unterschiede auf einen 2012er Stand zurück zu setzen. Hierbei sind aber nur einige der Unterschiede für ein echtes Paketdowngrade in Betracht zu ziehen. Die Paketheaderinformationen müssen teilweise modifiziert werden – während der Wert des Attributs „DTS:ObjectName“ (2014: „Package_2014“; 2012: „Package_2012“) geändert werden muss, spielt der Wert des XML Attributs „DTS:VersionBuild“ keine Rolle beim Downgrade.

Auch die GUIDS von Objekten im 2014er Paket können beim Downgrade vernachlässigt werden. Offenbar werden beim Upgrade auf 2014 die GUIDS aller Objekte zurückgesetzt, diese können prinzipiell beim Downgrade erhalten bleiben. Dasselbe gilt für alle Layoutinformationen und weitere Metadaten am Ende der Datei, diese werden entweder gar nicht benötigt oder beim Öffnen eines Pakets ohne diese Informationen zurückgesetzt.

Bei den Referenzen auf Task- oder Komponententypen wird es interessant. Hier werden die echten Unterschiede zwischen den SSIS 2012 und SSIS 2014 sichtbar. Offenbar folgen die 2014er Pakete einem neuen Standard. Während beispielsweise Pakete selber in SSIS 2012 im XML Attribut „DTS:CreationName“ noch mit dem Wert „SSIS.Package.3“ klassifiziert wurden, lautet der Wert im 2014er Paket „Microsoft.Package“. Analog gilt dies für alle Tasks und Komponenten im Paket. So lautet die Referenz für eine OLE DB Quelle nicht mehr „{165A526D-D5DE-47FF-96A6-F8274C19826B}“ sondern „Microsoft.OLEDBSource“.

Will man hinter diese Änderungen und den Aufbau des SSIS XML im Allgemeinen steigen, lohnt sich ein Blick in die Spezifikation des MS-DTSX2 Dateiformats. Das über 600 Seiten schwere Pamphlet beschreibt bis ins kleinste Detail die XML Strukturen und Inhalten von SSIS Paketen, und zwar sowohl für SSIS 2012 als auch für SSIS 2014. Leider gehen die Unterschiede zwischen den beiden Versionen nicht direkt hervor – ein Mapping zwischen „alten“ und „neuen“ Referenzen muss man daher mühsam selber recherchieren oder alternativ über den oben beschriebenen Weg des Paketupgrades und XML-Diffs per Hand ermitteln.

Zur Übersicht hier noch einmal die gefundenen Unterschiede in unserem Beispielpaket (ohne GUIDs der XML Attribute „DTS:DTSID“):

Fazit: Ein Downgrade von SSIS 2014 Paketen auf SSIS 2012 scheint prinzipiell möglich – hat man einmal ein Mapping der Task- und Komponentenreferenzen geht dies recht schnell von der Hand. Allerdings birgt dieses Vorgehen wie bei allen manuellen Manipulationen am SSIS XML auch Gefahren, es ist nicht auszuschließen, dass bei komplexeren Paketen oder dem Einsatz von Third-Party Komponenten Probleme beim manuellen Downgrade auftauchen.