こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SSISでデータベースの接続先を外部ファイル等で簡単に切り替える方法を教えてください

SSISにて、データベースの接続先を外部ファイル等で切り替える、
といった事は可能なのでしょうか?

現在は、
開発環境で接続していたデータベースを
検証環境のデータベースに接続を切り替えたいときに、
Visual Studio(BI) でdtsx ファイルを開いて、接続マネージャ上で
切り替えを行っています。

これをもっと簡易的に行いたいと考えているのですが、
そもそも可能なのでしょうか?

データソースファイルを作成し、そのファイルを直接書き換えたりしてみたのですが、
うまく接続先が切り替わりませんでした。。

どなたか方法をご存知の方、教えて頂ければ幸いに存じます。

投稿日時 - 2009-06-08 14:14:59

QNo.5026886

困ってます

質問者が選んだベストアンサー

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
それぞれで、構成ファイルに指定したサーバからデータをエクスポートしていることを確認する。

必要な作業はこれだけです。洩れるところはなさそうですけどねぇ。

投稿日時 - 2009-06-10 12:55:15

お礼

教えて頂いた手順どおりに作業を進めたところ、無事、出来ました!ありがとうございました!
(出来なかった原因は、別のパッケージの構成をSSIS上で作成したのがダメだったのかもしれません)

投稿日時 - 2009-06-11 11:26:30

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.2

>早速教えて頂いた方法で試してみたのですが、元のdtsxで指定している方の接続先が有効になってしまいます。。
>ConnectionString も追加してみたのですが、それでもダメでした。。

こちらでは問題なく切り替えられます。
察するに構成ファイルを指定しても、「ユーザ:xxはログインできませんでした」というエラーが発生し、
その結果Packageが抱えている接続を使っているということではないでしょうか。

構成ファイルのアイテムに「パスワード」を指定したとしても、パスワード自体は当然吐き出されません。
したがって、構成ファイルを開いて<ConfiguredValue></ConfiguredValue>の間に値をセットしないといけません。

構成ファイルをコピーして検証環境用のdtsConfigファイル(例えばinteg.dtsConfing)を作成したら、
そちらもサーバ名など必要な値を書き換えてください(パスワードも)。

なお、作成時に指定したdtsConfigファイル以外のファイルを/CONFスイッチで指定した場合、既定の構成ファイルが見つからないという警告が表示されますが、そのあと指定した構成ファイルを見に行きます。

http://technet.microsoft.com/ja-jp/library/ms162810(SQL.90).aspx

※ちなみに、DTExec 以外で接続を切り替える事は可能なのでしょうか?
構成ファイルはPackage実行時に読み込むファイルなので、どのような実行方法をイメージしておられるのかわかりませんが、既定の構成ファイルの中身を適切に設定すれば切り替えられるはずです。

投稿日時 - 2009-06-10 01:25:16

補足

ご回答ありがとうございます。

>察するに構成ファイルを指定しても、「ユーザ: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:\>

投稿日時 - 2009-06-10 11:10:05

ANo.1

実際のパッケージ実行にはDTExecを使っているということでしょうか?
SSIS-パッケージ構成 でパッケージ構成ファイルを作成する方法ではだめなんでしょうか?

該当する接続のServerName,InitialCatalog,UserName,Passwordあたりを指定しておけば、
xxxx.dtsConfigというファイルができあがりますから、これをコピーして開発環境用、検証環境用の2つを作成しておけば、
DTExec /File (パッケージパス) /Conf (構成ファイルパス)
という指定で実行時の構成ファイルを切り替えられます。

はずしていたらごめんなさい。

投稿日時 - 2009-06-09 02:47:36

補足

ご回答ありがとうございます。
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 以外で接続を切り替える事は可能なのでしょうか?

投稿日時 - 2009-06-09 15:48:20

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-