- ベストアンサー
SSISでデータベースの接続先を外部ファイル等で簡単に切り替える方法を教えてください
- SSISを使用して、データベースの接続先を外部ファイルなどで簡単に切り替える方法を教えてください。
- 現在、SSISで接続先を切り替えるにはVisual Studio(BI)を使用して手動で切り替える必要がありますが、もっと簡単な方法はないのでしょうか。
- データソースファイルを直接書き換える方法を試しましたが、うまく接続先が切り替わりませんでした。どなたか方法をご存知の方、教えていただけませんか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1) SSISパッケージを作成する 2) データフロータスクを1つ置き、中にOLEDBソースとフラットファイル変換先を1つ置く 3) OLEDBソースにSQL Serverの接続マネージャを指定し、テーブルを1つフラットファイルに吐き出す設定をする 4) SSIS - パッケージ構成を開き、「パッケージの構成を有効にする」をチェックして、構成を追加する 5) パッケージ構成ウィザードで構成ファイル名(test1.dtsConfig)を指定して、次へ 6) オブジェクトはPackage - 接続マネージャの中のSQL Server接続で、InitialCatalog,Password,ServerName,UserNameを指定して完了 7) パッケージをビルドする 8) フォルダに出来上がったtest1.dtsConfigをエディタで開いて、Passwordを設定する 9) test1.dtsConfigをコピーして、test2.dtsConfigを作成する。エディタで開いて別サーバの別DB情報に変更する (別サーバの別DBにも同名のテーブルを用意して、テーブルの中身を変えておきます) 10) Package.dtsx、test1.dtsConfig、test2.dtsConfigをSSISの入った全く違うマシンの C:\Work にコピーする 11) コマンドプロンプトから以下を実行する DTEXEC /File C:\Work\Package.dtsx /Conf C:\Work\test1.dtsConfig DTEXEC /File C:\Work\Package.dtsx /Conf C:\Work\test2.dtsConfig それぞれで、構成ファイルに指定したサーバからデータをエクスポートしていることを確認する。 必要な作業はこれだけです。洩れるところはなさそうですけどねぇ。
その他の回答 (2)
- jamshid6
- ベストアンサー率88% (591/669)
>早速教えて頂いた方法で試してみたのですが、元のdtsxで指定している方の接続先が有効になってしまいます。。 >ConnectionString も追加してみたのですが、それでもダメでした。。 こちらでは問題なく切り替えられます。 察するに構成ファイルを指定しても、「ユーザ:xxはログインできませんでした」というエラーが発生し、 その結果Packageが抱えている接続を使っているということではないでしょうか。 構成ファイルのアイテムに「パスワード」を指定したとしても、パスワード自体は当然吐き出されません。 したがって、構成ファイルを開いて<ConfiguredValue></ConfiguredValue>の間に値をセットしないといけません。 構成ファイルをコピーして検証環境用のdtsConfigファイル(例えばinteg.dtsConfing)を作成したら、 そちらもサーバ名など必要な値を書き換えてください(パスワードも)。 なお、作成時に指定したdtsConfigファイル以外のファイルを/CONFスイッチで指定した場合、既定の構成ファイルが見つからないという警告が表示されますが、そのあと指定した構成ファイルを見に行きます。 http://technet.microsoft.com/ja-jp/library/ms162810(SQL.90).aspx ※ちなみに、DTExec 以外で接続を切り替える事は可能なのでしょうか? 構成ファイルはPackage実行時に読み込むファイルなので、どのような実行方法をイメージしておられるのかわかりませんが、既定の構成ファイルの中身を適切に設定すれば切り替えられるはずです。
補足
ご回答ありがとうございます。 >察するに構成ファイルを指定しても、「ユーザ:xxはログインできませんでした」というエラーが発生し、 >その結果Packageが抱えている接続を使っているということではないでしょうか。 エラーが全く吐き出されず、 Packageが抱えている接続を使っているようです。 もしかして、Package上の接続マネージャか何かで、 接続に構成ファイルを使う、といった設定が別に必要なのでしょうか? 「パッケージの構成を有効にする」のチェックは入っているのですが、、 (指定しておかないと、置き換えがされなかったりする、とか?) 接続マネージャで色々試してみましたが、指定できる接続先は、 DBかデータソースくらいしか見つけられませんでした。。 >構成ファイルのアイテムに「パスワード」を指定したとしても、パスワード自体は当然吐き出されません。 >したがって、構成ファイルを開いて<ConfiguredValue></ConfiguredValue>の間に値をセットしないといけません。 はい、セット済みです。 >※ちなみに、DTExec 以外で接続を切り替える事は可能なのでしょうか? >構成ファイルはPackage実行時に読み込むファイルなので、どのような実行方法をイメージしておられるのかわかりませんが、既定の構成ファイルの中身を適切に設定すれば切り替えられるはずです。 例えば、Sql Server の Integration Services に dtsx ファイルを登録し、 それを Sql Server Agent でキックする、といった実行の場合でも可能でしょうか? <以下、実行結果です> C:\>command.bat Microsoft (R) SQL Server Execute Package Utility Version 9.00.3042.00 for 32-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. 開始: 10:50:31 進捗状況: 2009-06-1010:50:32.26 ソース: データ フロー タスク 検証しています: 0% の完了 進捗状況の終了 進捗状況: 2009-06-1010:50:32.26 ソース: データ フロー タスク 検証しています: 50% の完了 進捗状況の終了 : : 進捗状況: 2009-06-1010:50:32.70 ソース: データ フロー タスク クリーンアップ: 50% の完了 進捗状況の終了 進捗状況: 2009-06-1010:50:32.71 ソース: データ フロー タスク クリーンアップ: 100% の完了 進捗状況の終了 DTExec: パッケージの実行から返されました DTSER_SUCCESS (0)。 開始: 10:50:31 完了: 10:50:32 経過時間: 1.187 秒 C:\>
- jamshid6
- ベストアンサー率88% (591/669)
実際のパッケージ実行にはDTExecを使っているということでしょうか? SSIS-パッケージ構成 でパッケージ構成ファイルを作成する方法ではだめなんでしょうか? 該当する接続のServerName,InitialCatalog,UserName,Passwordあたりを指定しておけば、 xxxx.dtsConfigというファイルができあがりますから、これをコピーして開発環境用、検証環境用の2つを作成しておけば、 DTExec /File (パッケージパス) /Conf (構成ファイルパス) という指定で実行時の構成ファイルを切り替えられます。 はずしていたらごめんなさい。
補足
ご回答ありがとうございます。 DTExecを使おうと考えています。 早速教えて頂いた方法で試してみたのですが、 元のdtsxで指定している方の接続先が有効になってしまいます。。 ConnectionString も追加してみたのですが、それでもダメでした。。 ↓test.dtsConfigの中身です。(ServerName,InitialCatalog,UserName,Passwordのみ) <?xml version="1.0"?><DTSConfiguration><DTSConfigurationHeading><DTSConfigurationFileInfo GeneratedBy="domain\test_user" GeneratedFromPackageName="test" GeneratedFromPackageID="{FFFFFFFF-FFFF-FFAF-FFD5-FFFFFCBB9CE0}" GeneratedDate="2009/06/09 午後 1:00:00"/></DTSConfigurationHeading><Configuration ConfiguredType="Property" Path="\Package.Connections[TEST-DB].Properties[InitialCatalog]" ValueType="String"><ConfiguredValue>DataDB</ConfiguredValue></Configuration><Configuration ConfiguredType="Property" Path="\Package.Connections[TEST-DB].Properties[Password]" ValueType="String"><ConfiguredValue></ConfiguredValue></Configuration><Configuration ConfiguredType="Property" Path="\Package.Connections[TEST-DB].Properties[ServerName]" ValueType="String"><ConfiguredValue>100.10.0.1</ConfiguredValue></Configuration><Configuration ConfiguredType="Property" Path="\Package.Connections[TEST-DB].Properties[UserName]" ValueType="String"><ConfiguredValue></ConfiguredValue></Configuration></DTSConfiguration> ※ちなみに、DTExec 以外で接続を切り替える事は可能なのでしょうか?
お礼
教えて頂いた手順どおりに作業を進めたところ、無事、出来ました!ありがとうございました! (出来なかった原因は、別のパッケージの構成をSSIS上で作成したのがダメだったのかもしれません)