SQL Server 2005 und 2008 auf einer Maschine: Welche DTEXEC.EXE?

30. Mai 2012

Bei einem Kunden werden aktuell alle BI-Anwendungen von SQL Server 2005 auf 2008 R2 migriert. Da eine solche Migration nicht von heute auf morgen über die Bühne geht, müssen die Entwickler in der Regel auch mit beiden Umgebungen gleichzeitig entwickeln können. Dazu sollte auf Entwicklerrechnern sowohl Visual Studio 2005 und 2008 (BIDS) wie auch lokale SQL Server in beiden Versionen installiert sein. An sich ist das auch kein Problem, beides läuft einwandfrei nebeneinander.

Wenn aber lokale auf dem Entwicklerrechner SSIS Pakete mit DTEXEC ausgeführt werden, z. B. um Unittest auszuführen, muss darauf geachtet werden, dass die richtige Version von der DTEXEC.EXE zur Ausführung verwendet wird. Ansonsten kommt es zu Problemen bei der Ausführung der Pakete. Wie aber wird entschieden, welche Version von DTEXEC verwendet wird?

Reihenfolge im Systempfad ändern

Bei der SQL Server Installation wird ein Eintrag im Systempfad angelegt, der auf den Ordner zeigt, in dem die DTEXEC.EXE liegt. Bei einer Standardinstallation ist das der Pfad "Microsoft SQL Server90DTSBinn" für 2005 bzw. "Microsoft SQL Server100DTSBinn" für 2008 (R2). Sind beide Versionen installiert gibt es auch beide Einträge. Beim Aufruf aus einem beliebigen Verzeichnis wird nun stets der Pfad verwendet, der als erstes im Systempfad eingetragen ist. Eine Lösung zur Verwendung der richtigen Version ist somit die Anpassung der Reihenfolge im Systempfad.

DTEXEC.EXE umbenennen

Eine einfachere und schnellere Methode ist die Umbenennung der DTEXEC.EXE, die gerade nicht verwendet werden soll, in z. B. DTEXEC90.EXE. Auf diese Weise wird nur eine – die richtige – Version überhaupt gefunden und somit muss die korrekte ausgeführt werden. Vorteil dieser Lösung ist zudem, dass sie sehr schnell rückgängig gemacht werden kann. Für noch mehr Komfort und weniger Fehleranfälligkeit kann man das Ganze auch in einem CMD-Skript verpacken und bei Bedarf aufrufen. So könnten die Umbennungen der 2005er bzw. 2008er DTEXEC-Versionen jeweils in einem Skript "PrepareUnitTestsWith200X.cmd" abgebildet werden.