SSIS 2008-Paketkonfigurationen werden ignoriert


10

Mit der Änderung der Paketkonfigurationen im Jahr 2008 im Vergleich zu 2005, als ich / ConfigFile Something.dtsConfig in der Befehlszeile angegeben habe, behalten die im Paket definierten Variablen ihre Entwurfszeitwerte bei, anstatt die Einstellungen aus der Konfigurationsdatei zu verwenden.

Ich bin mir nicht ganz sicher, wie ich die externe Konfigurationsdatei überhaupt verwenden kann. Ich habe Artikel gelesen, die besagen, dass nur festgelegte Entwurfszeitkonfigurationen das Laden der externen Datei überschreiben. Bedeutet dies, dass ich die Variablen in leere Zeichenfolgen ändern kann und sie dann überschrieben werden? Ich kann die Variable nicht vollständig löschen! Was ist mit ganzen Zahlen?

Ich habe Artikel gesehen, in denen das Ausschalten mithilfe von Paketkonfigurationen im Paket erwähnt wird.

Ich kann den SSIS-Paketeditor oder einen XML-Editor verwenden, um den Pfad der Konfigurationsdatei im Paket zu ändern, und dann werden die Einstellungen dieser Datei "last" verwendet (unabhängig von der externen / ConfigFile-Option), aber ich möchte nicht Paket ändern. Ich möchte ein Paket mit Test.dtsConfig und Production.dtsConfig und kann hin und her tauschen, ohne das Paket zu ändern.

Was ist der empfohlene Weg, dies jetzt zu tun?


1
Möglicherweise finden Sie Ihre Erleichterung hier im SQLServerCentral-Forum. Eine Erklärung der Verhaltensänderung finden Sie hier - Abschnitt Verhaltensänderungen im Zusammenhang mit Paketkonfigurationen.
Marian

Bitte beachten Sie die folgenden Dateien, eine Vorstellung darüber zu haben , welche Pakete und configs ich sprechen: Config und Chargen , Test - Paket und Readme .
Marian

Antworten:


10

Sie müssen berücksichtigen, dass das Paket bei der Ausführung mit BIDS zuerst den Variablenwert aus der Konfigurationsdatei übernimmt. Nur wenn die Konfigurationsdatei nicht vorhanden ist, wird eine Warnung ausgegeben und der Wert wird aus dem Paket übernommen.

Jetzt ist die Situation in der Befehlszeile etwas anders. Sie können die folgenden Situationen haben:

  1. Führen Sie das Paket in cmd-Zeile aus, ohne dass eine Konfigurationsdatei ausgewählt wurde:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx"
    • Wenn die ursprüngliche Konfigurationsdatei (nennen wir sie Prod) nicht in demselben Pfad vorhanden ist, der in den Metadaten des Pakets definiert ist, werden Werte aus dem Paket verwendet und Sie erhalten nur eine Warnung, dass die Konfigurationsdatei fehlt.
    • Wenn die ursprüngliche Konfigurationsdatei vorhanden und gültig ist, werden Werte aus der Konfigurationsdatei verwendet (innere Werte werden umgangen).
  2. Führen Sie das Paket in cmd-Zeile aus, ohne dass eine Konfigurationsdatei ausgewählt wurde, jedoch mit der im Aufruf festgelegten Variablen:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /SET \Package.Variables[checkMe];"outside the package in cmd line"
    • Wenn die ursprüngliche Konfigurationsdatei nicht vorhanden ist, wird der Wert aus dem Paketaufruf / SET übernommen.
    • Wenn die ursprüngliche Konfigurationsdatei vorhanden ist, wird der Wert aus der Konfigurationsdatei übernommen und sogar das / SET wird ignoriert (dies wird nur im obigen Fall verwendet).
  3. Führen Sie das Paket in cmd-Zeile mit einer neuen Konfigurationsdatei aus (sagen wir DEV statt Prod):

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig"
    • Wenn die neue Konfigurationsdatei (Dev) vorhanden ist und die alte (Prod) nicht, werden Werte daraus verwendet.
    • Wenn sowohl die Dev- als auch die Prod-Konfigurationsdatei vorhanden sind, werden nur Werte von Prod verwendet (DEV wird umgangen, auch wenn dies im Befehlszeilenaufruf angegeben ist).
  4. Führen Sie das Paket in cmd-Zeile mit einer neuen Konfigurationsdatei und einer SET-Anweisung im Aufruf aus:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig" /SET \Package.Variables[checkMe];"outside the package in cmd line - DEV config"
    • Wenn beide Konfigurationsdateien vorhanden sind, wird Prod verwendet, alle anderen werden ignoriert, sogar das SET.
    • Wenn keine Konfigurationsdatei vorhanden ist, wird der SET-Wert verwendet.

Kurz gesagt, wenn Sie eine neue Konfigurationsdatei verwenden möchten, müssen Sie die alte umbenennen / verschieben und das Paket mit / configFile aufrufen. Wenn dies nicht ausreicht und Sie sogar eine neue Konfigurationsdatei überschreiben möchten, verwenden Sie die Variable / SET. Oder Sie können eine beliebige Konfigurationsdatei umgehen und einfach / SET-Anweisungen im Batch-Aufruf verwenden.

Hoffentlich bringt das etwas Licht in Ihre Möglichkeiten.


Es klingt also so, als ob eines der großen Probleme darin besteht, dass mein Pfad auf der Entwicklungsbox während der Ausführung mit taht auf dem Server identisch ist, sodass der Pfad zur Konfiguration im Paket immer gültig ist.
Cade Roux

Ich denke also, ich sollte Dev, Test und Prod haben, das Paket sollte immer auf Dev zeigen und niemals eine Dev-Konfiguration auf meinem Server haben, und dann kann ich mehrere Konfigurationen auf dem Server vornehmen und in der Lage sein, nach Belieben gegen verschiedene Konfigurationen zu laufen Die Dev-Konfiguration im Paket wird niemals gefunden. Ich kann also mit der Dev-Konfiguration debuggen, aber dann werde ich Probleme haben, sie über die Befehlszeile in der Dev-Box auszuführen, da sie diese Dev-Konfiguration findet.
Cade Roux

Ich nehme an, Sie stimmen zu, dass dies wirklich viel komplexer ist, als es sein sollte, oder? Als hätten sie eine neue kleine Funktion (das Neuladen) in der Änderung auf 2008 erhalten, aber das am häufigsten verwendete Szenario der Paketkonfigurationen beendet.
Cade Roux

Ja, ich stimme zu, das ist viel hässlicher als es sein sollte. Ich habe viel gebraucht, um das herauszufinden, weil ich immer vergessen habe, die ursprüngliche Konfigurationsdatei umzubenennen :-). Ich hätte es mir mehr gewünscht, in der folgenden Reihenfolge zu sein: SET, / configFile, ursprüngliche Konfiguration, innerer Paketwert. Es hätte mehr Sinn für mich gemacht ..
Marian

In keinem der Artikel, die ich gelesen habe, wird wirklich erwähnt, dass auf die ursprüngliche Konfigurationsdatei zugegriffen werden kann, was ein großes Problem darstellt. Jetzt verstehe ich, warum sie diesen SSIS-Paketeditor veröffentlicht haben, damit Sie ihn innerhalb des Pakets ändern können, ohne BIDS öffnen zu müssen.
Cade Roux
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.