無視されているSSIS 2008パッケージ構成


10

コマンドラインで/ ConfigFile something.dtsConfigを指定すると、2005年と比較して2008年にパッケージ構成が変更されるため、パッケージで定義された変数は、構成ファイルの設定を使用するのではなく、設計時の値を保持します。

外部設定ファイルを使用する方法を完全に理解しているのか、私にはよくわかりません。設定されている設計時の構成のみが外部ファイルの負荷を上書きするという記事を読みました。これは、変数を空の文字列に変更すると、上書きされることを意味しますか?変数を完全に削除することはできません!整数はどうですか?

パッケージのパッケージ構成を使用してオフにすることについて言及している記事を見ました。

SSISパッケージエディターまたはXMLエディターを使用してパッケージ内の構成ファイルのパスを変更し、そのファイルの設定を "外部"(外部の/ ConfigFileオプションに関係なく)使用しますが、パッケージの変更。Test.dtsConfigとProduction.dtsConfigを含む1つのパッケージが必要で、パッケージを変更せずに前後にスワップできるようにします。

これを行うための推奨される方法は何ですか?


1
SQLServerCentralフォーラムここで安心を見つけることができます。動作の変更についてのいくつかの説明はここにあります -セクションパッケージ構成に関連する動作の変更。
マリアン

私が話しているパッケージと構成についてのアイデアを得るには、次のファイルを参照してください:構成とバッチテストパッケージReadme
マリアン

回答:


10

BIDSで実行する場合、パッケージは最初に構成ファイルから変数値を取得し、構成ファイルが存在しない場合にのみ警告がスローされ、値がパッケージから取得されることを考慮する必要があります。

さて、コマンドラインの状況は少し異なります。次のような状況が考えられます。

  1. 設定ファイルを選択せず​​にcmd行でパッケージを実行します。

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx"
    • 元の構成ファイル(名前をProdとする)がパッケージのメタデータで定義された同じパスに存在しない場合、パッケージ内の値が使用され、構成ファイルが見つからないという警告が表示されます。
    • 元の構成ファイルが存在し、有効である場合、構成ファイルの値が使用されます(内部の値はバイパスされます)。
  2. 設定ファイルを選択せず​​にcmd行でパッケージを実行しますが、呼び出しで変数を設定します。

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /SET \Package.Variables[checkMe];"outside the package in cmd line"
    • 元の構成ファイルが存在しない場合、値は/ SETパッケージ呼び出しから取得されます。
    • 元の構成ファイルが存在する場合、値は構成ファイルから取得され、/ SETも無視されます(これは上記の場合にのみ使用されます)。
  3. 新しい構成ファイルを使用してcmd行でパッケージを実行します(Prodの代わりにDEVとしましょう):

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig"
    • 新しい構成(Dev)ファイルが存在し、古い(Prod)ファイルが存在しない場合、そのファイルの値が使用されます。
    • DevとProdの両方の構成ファイルが存在する場合、Prodの値のみが使用されます(コマンドライン呼び出しで指定されている場合でも、DEVはバイパスされます)。
  4. 新しい構成ファイルと呼び出しのSETステートメントを使用して、cmd行でパッケージを実行します。

    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"
    • 両方の設定ファイルが存在する場合、Prodが使用され、他のすべては無視され、SETも含まれます。
    • 設定ファイルが存在しない場合は、SET値が使用されます。

つまり、簡単に言うと、新しい構成ファイルを使用する場合は、古い構成ファイルの名前を変更/移動し、/ configFileを使用してパッケージを呼び出す必要があります。それだけでは不十分で、新しい設定ファイルも上書きしたい場合は、/ SET変数を使用します。または、構成ファイルをバイパスして、バッチ呼び出しで/ SETステートメントを使用することもできます。

うまくいけば、あなたの可能性に光を当てることができます。


したがって、大きな問題の1つは、開発ボックスのパスが実行中のサーバーのパスと同じであるため、パッケージの構成へのパスが常に有効であることです。
Cade Roux

したがって、私はDev、Test、およびProdを使用し、パッケージが常にDevをポイントし、サーバーにDev構成を持たないようにする必要があります。サーバーに複数の構成を作成し、さまざまな構成に対して自由に実行できます。パッケージ内のDev構成は見つかりません。そのため、Dev configを使用してデバッグできますが、そのdev configが見つかるため、devボックスのコマンドラインから実行するのは困難です。
Cade Roux、

これは実際よりもかなり複雑であることに同意するでしょう。彼らが2008年への変更で新しい小さな機能(リロード)を獲得したように、パッケージ構成の最も一般的な使用シナリオを殺しました。
Cade Roux

まあ、はい、私はそれが本来あるべきよりもずっと醜いことに同意します。元の設定ファイルの名前を変更するのをいつも忘れていたので、これを理解するのに多くの時間がかかりました:-)。私はそれを次の順序にしたいと思っています:SET、/ configFile、元の構成、内部パッケージの値。それは私のためのより多くの意味を成していただろう...
マリアン

私が読んだ記事のどれも、問題の多くにアクセスできるのは元の構成ファイルにアクセスできることについては本当に触れていません。これで、彼らがそのSSISパッケージエディターを公開したので、BIDSを開かなくてもパッケージ内で変更できるようになりました。
Cade Roux
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.