web-dev-qa-db-ja.com

Visual StudioでSSISロードを実行するときに、ODBC接続が失敗しますが、パッケージ実行ユーティリティを使用して同じパッケージを実行するときは失敗するのはなぜですか?

私はSSIS 2012でデータマートロードパッケージに取り組んでいます。VisualStudioでパッケージを実行しようとすると、次のエラーが発生します。

「接続マネージャData Warehouse.ssusrへのAcquireConnectionメソッド呼び出しがエラーコード0xC0014009で失敗しました」。

接続マネージャデータウェアハウス.ssusrの接続をテストすると、合格することがわかります。

パッケージ実行ユーティリティを使用してVisual Studioの外部でパッケージを実行すると、パッケージが実行されます。

何が起こっているのかわかりません。

パッケージは、SQL Serverジョブスケジュールを使用して実行することも拒否します。

14
Scott Wood

ここではいくつかの仮定を行いますが、これは32ビット対64ビットの問題であると仮定します。確認するには、コマンドプロンプト(Windowsキー、R、cmd.exeまたはStart、Run、cmd.exe)からこれら2つのコマンドを試してください。

"C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\dtexec.exe" /file C:\myPackage.dtsx
"C:\Program Files\Microsoft SQL Server\110\DTS\Binn\dtexec.exe" /file C:\myPackage.dtsx

1つ目はパッケージを32ビットモードで実行し、2つ目は64ビットモードで実行します。ドライバーと作成したDSNは32/64ビットの世界でのみ表示されるため、これは問題になります。

SSDTの修正

必要なもの(おそらく32ビットバージョン)を特定したら、プロジェクトが適切なランタイムを使用していることを確認する必要があります。プロジェクトを右クリックして[プロパティ]を選択し、[構成プロパティ]の[デバッグ]タブに移動します。

Debugging Tab, Run64BitRuntime

Run64BitRuntime値を反転した後、パッケージがSSDT内から機能すると想定しています。

SQLエージェントの修正

ジョブステップのbittednessを変更するには、既存のSQLエージェントジョブを編集する必要があります。これは、[構成]タブにあり、[詳細]タブにあります。 32ビットランタイムをオン/オフにします。

agent 32bit tab

嘘と欺瞞

注意深い人々は dtexec/X86オプション。信じてはいけません。正しいビット数を取得する唯一の方法は、正しいdtexec.exeを明示的に呼び出すことです。

このオプションは、SQL Serverエージェントでのみ使用されます。コマンドプロンプトでdtexecユーティリティを実行する場合、このオプションは無視されます。

40
billinkc