2005 ~ 2008 R2 または 2012 とパッケージ展開モデルを想定すると、構成のオプションは次のとおりです。
- 親パッケージ
- レジストリ値
- 環境変数
- コマンドラインの割り当て
- XML ファイル
- データベース テーブル
一般に、単一値構成 (1 ~ 4) と複数値構成 (5 ~ 6) にグループ化できます。それらすべてに長所と短所がありますが、プライマリ構成リポジトリとしてデータベース テーブルを使用すると、最高の経験が得られます。すべての値は特定の環境用にそこに保存されるため、各環境 (開発、テスト、ロード、ステージ、本番) サーバーには、構成用のテーブルを含む専用のカタログがあります (ログやその他の ETL 固有のものも同様です)。
テーブルアプローチ
私のテーブルが気に入らない場合は、独自のテーブルを作成するか、BIDS/SSDT に任せることができます。
CREATE TABLE dbo.SSISConfig
(
id identity(1,1) NOT NULL PRIMARY KEY
, ConfigurationFilter nvarchar(150) NOT NULL -- Package Name
, ConfiguredValue nvarchar(255) NULL -- Value of setting, such as a connection string
, PackagePath nvarchar(255) NOT NULL -- Target within SSIS package where value is written
, ConfiguredValueType nvarchar(20) NOT NULL -- Data type such as String, Int32, or DateTime
)
DEVサーバーでの例は次のようになります
id | ConfigurationFilter| ConfiguredValue | PackagePath | ConfiguredValueType
100 | Default.2005.Sales | Data Source=DEV;Initial Catalog=SALESDEVDB;Provider=SQLNCLI.1;Integrated Security=SSPI; | \Package.Connections[SLSDB].Properties[ConnectionString] | String
本番環境の同じ行は次のようになります
id | ConfigurationFilter| ConfiguredValue | PackagePath | ConfiguredValueType
123 | Default.2005.Sales | Data Source=PROD;Initial Catalog=SALESPRODB;Provider=SQLNCLI.1;Integrated Security=SSPI; | \Package.Connections[SLSDB].Properties[ConnectionString] | String
データベースとサーバー名の変更を処理するために展開されるサーバーを考慮した構成展開スクリプトがあるため、維持するスクリプトは 1 つだけです。そのような場合、XML ファイルの同期を維持するのは難しいと思います (がらくた、プロダクションの構成ファイルを更新するのを忘れて、間違ったデータを取得しました)。
トリック
2 番目の箇条書きで特定したように、これを機能させる秘訣は、SSIS に別の構成セットを使用するように指示するメカニズムが必要なことです。マルチインスタンス マシンを使用していない場合は、環境変数を使用するのが優れたアプローチであることがわかります。パッケージを実行するサーバーごとに 1 回定義すれば完了です。マルチインスタンス環境で作業する場合は、よりトリッキーな状況になります。
HLGEM は、マルチインスタンス環境でローカル環境変数を使用してさまざまなサービス アカウントを使用するという回答で、かなり巧妙なアプローチをとったと思います。下にスクロールして、マルチインスタンス マシンでの私のアプローチを確認できます。
構成について説明したさまざまな回答