{"id":44,"date":"2008-11-07T19:28:52","date_gmt":"2008-11-07T18:28:52","guid":{"rendered":"http:\/\/csopro.de\/biblog\/2008\/11\/konfigurationsdateien-im-ssis-nutzen-und-fallen\/"},"modified":"2008-11-07T19:28:52","modified_gmt":"2008-11-07T18:28:52","slug":"konfigurationsdateien-im-ssis-nutzen-und-fallen","status":"publish","type":"post","link":"https:\/\/www.csopro.de\/biblog\/2008\/11\/konfigurationsdateien-im-ssis-nutzen-und-fallen\/","title":{"rendered":"Konfigurationsdateien im SSIS &#8211; Nutzen und Fallen"},"content":{"rendered":"<p>In SSIS-Paketen k\u00f6nnen alle m\u00f6glichen Einstellungen in <strong>Konfigurationsdateien<\/strong> ausgelagert werden. Insbesondere k\u00f6nnen damit<\/p>\n<ul>\n<li>die Eigenschaften von Verbindungen wie ConnectionString, User, Passwort<\/li>\n<li>oder Variablen wie Name des zu durchsuchenden Datei-Ordners oder \u00e4hnliches<\/li>\n<\/ul>\n<p>extern konfiguriert werden &#8211; ganz analog zur web.config in ASP.NET oder app.config in Windows-Programmen. Theoretisch ist es m\u00f6glich, viel mehr Attribute als oben genannte in der Konfigurationsdatei zu pflegen &#8211; aus \u00dcbersichtlichkeitsgr\u00fcnden ist das aber nicht empfohlen.<\/p>\n<p>Dies hat den <strong>Sinn<\/strong>, dass das Paket in der Entwicklungs-, Test- und Produktionsumgebung immer gleich ist und nur die Konfigurationsdateien bei einer Installation angepasst werden. Dadurch wird sichergestellt, dass wirklich das getestete Paket in Produktion geht und nicht aus Versehen beim \u00d6ffnen im Visual Studio irgendwelche Einstellungen angepasst wurden. Dies ist in meinen Augen &#8211; neben vielen anderen Features &#8211; ein wesentlicher Vorteil von SSIS gegen\u00fcber seinem Vorg\u00e4nger DTS.<\/p>\n<p>Konfigurationsdateien werden <strong>erstellt<\/strong> \u00fcber SSIS &gt; Package Configurations&#8230; :<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2008\/11\/screenshotpackageconfig.jpg\"><img loading=\"lazy\" decoding=\"async\" height=\"362\" alt=\"Erstellen von Konfigurationsdateien\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2008\/11\/screenshotpackageconfig-small.jpg\" width=\"450\" \/><\/a><\/p>\n<p>In der Regel werden XML-Konfigurationsdateien verwendet. Dort kann man den Ort der Konfigurationsdatei und die enthaltenen Attribute angeben. Dadurch erzeugt das Visual Studio die entsprechende Konfigurationsdatei. In dieser Konfigurationsdatei sind alle Werte der Attribute gespeichert, so wie sie derzeit (im Verbindungsmanager, Variablenfenster, etc.) definiert sind. Einzige <strong>Ausnahme<\/strong>: Falls im Verbindungsmanager ein <strong>Passwort<\/strong> verwendet wird, wird in der Konfigurationsdatei zwar dieses Attribut angelegt, aber nicht der Wert \u00fcbernommen. (<strong>erste kleine Falle<\/strong>)<\/p>\n<p>Nun ist die <strong>Idee<\/strong>, bei der Installation in der Produktiv-Umgebung das dtsx-Paket unver\u00e4ndert zu lassen und nur die Konfigurationsdatei anzupassen. Beim Starten des Pakets kann man dann die zu verwendende Konfigurationsdatei angeben (z.B. im SQL Server Agent oder beim direkten Aufruf von DTExec) und diese wird beim Ausf\u00fchren des Pakets verwendet.<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2008\/11\/sqlserveragentconfig.jpg\"><img loading=\"lazy\" decoding=\"async\" height=\"412\" alt=\"Beispiel f\u00fcr die Verwendung einer Konfigurationsdatei im SQL Server Agent\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2008\/11\/sqlserveragentconfig-small.jpg\" width=\"450\" \/><\/a><\/p>\n<p>Allerdings gibt es ein paar Fallen, die man umschiffen sollte:<\/p>\n<p><strong>Falle 1<\/strong>: \u00c4nderungen an Variablen w\u00e4hrend der Entwicklung gehen beim Starten des Pakets im Visual Studio verloren:<\/p>\n<p>Wenn man im Visual Studio Eigenschaften \u00e4ndert, die bereits in die Konfigurationsdatei exportiert wurden, ist diese \u00c4nderung wirkungslos. Beim Start des Pakets wird ja die Konfigurationsdatei geladen und dessen Wert verwendet. Eine automatische Aktualisierung der Konfigurationsdatei bei \u00c4nderungen im Visual Studio findet (gl\u00fccklicherweise) nicht statt.<\/p>\n<p><strong>Falle 2<\/strong>: Das Paket versucht beim Start die im Paket definierte Konfigurationsdatei zu laden<\/p>\n<p>Im produktiven Umfeld liegt die Konfigurationsdatei wahrscheinlich nicht am selben Ort (im Dateisystem) wie in der Entwicklungsumgebung. Wenn man nun das Paket (wie unter Idee beschrieben) in der Produktion unter Angabe der Produktions-Konfigurationsdatei startet, so versucht das Paket zun\u00e4chst die Datei zu laden, deren Pfad im Paket (s. obiger Screenshot) definiert ist. Diese Datei wird in der Regel nicht gefunden werden. Dies wird als Fehler protokolliert &#8211; das Paket bricht aber nicht ab. Danach wird die beim Aufruf mitgegebene Konfigurationsdatei geladen. Somit l\u00e4uft das Paket sauber durch &#8211; allerdings ist ein Fehler protokolliert, der Verwirrung stiften kann. Deswegen ist es am sinnvollsten, den Haken bei &#8222;Enable package configurations&#8220; (s. Screenshot) wieder zu entfernen. Durch diesen Haken hat man sich somit nur auf einfache Art und Weise eine Konfigurationsdatei erstellen lassen (anstelle sie komplett selbst manuell zu erstellen).<\/p>\n<p>Nun k\u00f6nnte man sich wundern, ob dann trotzdem die beim Aufruf mitgegebene Konfigurationsdatei geladen wird. Die Bedeutung des Hakens ist in meinen Augen n\u00e4mlich etwas verwirrend. Es besagt n\u00e4mlich <strong>nicht<\/strong> &#8222;Dieses Paket hat eine Kofnigurationsdatei mit den dort eingestellten Attributen&#8220;. Egal ob der Haken gesetzt ist oder nicht, kann eine Konfigurationsdatei beim Start angegeben werden, die <strong>beliebige<\/strong> Attribute ver\u00e4ndert, also auch Attribute, die nicht im Visual Studio zum Export in die Konfigurationsdatei markiert worden waren. Der Haken besagt somit, dass &#8222;Dieses Paket l\u00e4dt beim Start automatisch die angegebene Konfigurationsdatei &#8211; danach werden die beim Start \u00fcbergebenen Konfigurationsdateien geladen&#8220;.<\/p>\n<p>Dieses Verhalten ist in meinen Augen wenig intuitiv &#8211; aber so ist es halt. Dadurch kann man sein eigenes Paket also auch nicht sch\u00fctzen, so dass bestimmte Attribute nicht von au\u00dfen durch Konfigurationsdateien \u00fcberschrieben werden k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In SSIS-Paketen k\u00f6nnen alle m\u00f6glichen Einstellungen in Konfigurationsdateien ausgelagert werden. Insbesondere k\u00f6nnen damit die Eigenschaften von Verbindungen wie ConnectionString, User, Passwort oder Variablen wie Name des zu durchsuchenden Datei-Ordners oder \u00e4hnliches extern konfiguriert werden &#8211; ganz analog zur web.config in ASP.NET oder app.config in Windows-Programmen. Theoretisch ist es m\u00f6glich, viel mehr Attribute als oben genannte &hellip; <a href=\"https:\/\/www.csopro.de\/biblog\/2008\/11\/konfigurationsdateien-im-ssis-nutzen-und-fallen\/\" class=\"more-link\"><span class=\"screen-reader-text\">Konfigurationsdateien im SSIS &#8211; Nutzen und Fallen<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-integrationservices"],"_links":{"self":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":0,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}