ol0ooSSIS のパッケージ構成 (dtsconfig) を使用することで、設定を外部ファイル上に設定することが可能となります。
今回の投稿では、パッケージ構成を使用して、接続マネージャーの情報を外部のファイルに設定する方法をまとめてみたいと思います。
■接続マネージャーの情報をパッケージ構成で設定
今回はパッケージ構成を使用するために SSDT の SSIS のプロジェクトでは [パッケージ配置モデル] を使用しています。
OLE DB ソース で SQL Server に接続して、フラット ファイル変換先のテキストファイルにテーブルの内容を出力するという流れになっています。
この時に以下の情報が接続マネージャーで設定されています。
OLEDB 接続マネージャー | 接続先の接続文字列 |
フラットファイル 接続マネージャー | ファイルの出力先 ファイル名 |
ファイル名は環境固有になるということはないかも知れませんが、接続先やファイルの出力先の情報は開発環境と本番環境で異なることがあると思います。
このような環境を使用している場合、接続先の変更方法としては、
- BIDS / SSDT から環境に合わせて接続マネージャーの内容を設定
- .dtsx ファイルをテキストエディタで開いて内容を変更
# dtsx は xml 形式のファイルですのでエディタで変更できます。
というような対応をすることができますが、手修正ですので修正漏れや記述ミスがあるかと思います。
このような環境に依存する設定に関してはパッケージ構成で外部ファイルに出力しておくとよいかと思います。
BIDS か、SSDT でパッケージ構成モデルのプロジェクトを作成している場合は、メニューバーの [SSIS] から [パッケージ構成] からパッケージ構成ファイルを作成することができます。
ファイルの作成はウィザードに従うだけですので割愛しますが、パッケージ構成ウィザードでは、以下の画像のように接続マネージャーの設定をパッケージ構成で設定することができるようになります。
# パッケージ構成ウィザードではどの設定を外部ファイルに含めるかという指定のみとなり (ReadOnly で変更できない) 、実際の変更はテキストエディタで dtsconfig を開いて修正する必要がありそうですが。
OLEDB 接続の場合は、Initial Catalog や ServerName の情報などをパッケージ構成に出力しておくとよいかと思います。
設定をすると dtsconfig ファイルに以下のように設定が出力されます。
フラットファイル接続マネージャーの情報も同じような方法で、ConnectionString をパッケージ構成で設定することで設定を外部ファイルに書き出すことができますが、複数のファイルが存在する場合は異なるアプローチをしたほうが良いかと思います。
ConnectionString にはファイルのフルパスを記述をする必要があるため、複数のファイルがある場合は各ファイル単位でパスを変更する必要が出てきます。
ファイルの出力先は一つである (統一されている) ことが多いかと思いますので、できれば一か所の変更だけで対応できると楽ですよね。
そのような場合は変数と組み合わせて設定するとよさそうです。
まずは、パッケージ内の変数としてパスを格納するための変数を作成しておきます。
次に、この変数を使用してファイルの出力先を変更できるように設定をします。
設定はフラットファイル接続マネージャーのプロパティで Expressions を設定することで実施します。
式としては以下のような内容を設定します。
ConnectionString を変数名を使用したものに書き換えるという単純な式です。
最後にパッケージ構成でこの変数の内容を外部に出すように設定します。
これで設定は完了です。
パッケージ構成に設定した内容は .dtsconfig に出力されていますので、以降の設定変更は .dtsx ではなくこの構成ファイルを変更することで対応できるようになります。
設定の切り替えは、環境によって複数の構成ファイルを用意しておいて、BIDS/SSDT のメニューの [SSIS] → [パッケージ構成] からパッケージ構成オーガナイザーを使用して、使用するパッケージ構成ファイルを変更する、
[C:Program FilesMicrosoft SQL Server110DTSBinn] (SQL Server 2012 の場合のパス) の [dtexec.exe] の [/config] オプションから使用する構成ファイルを指定するというがあるかと思います。
.dtsx をテキストエディタで開いて、.dtsconfg のファイルパス (DTS:ConfigurationString) を直接変更するという方法もありますね。
メンテナンス性を考慮したパッケージの作成って大事ですね~。