0

入力FTPディレクトリからファイルを取得し、さらに処理するために内容を一時ディレクトリに解凍するSSISジョブがあります。入力FTPディレクトリ上でFor-Eachディレクトリループを使用しており、その中にWinzipへの呼び出しがあります。コマンドライン呼び出しの引数は、SSIS式ビルダーを使用して、入力ファイルのファイル名と一時ディレクトリの名前で構成されます。ExpressionBuilderでは次のようになります。

 -e  " +  @[User::InputFolder] + "\\" + @[User::CurrentInputFileName] + "  " + @[User::TempFolder] 

これで、VS2005からローカルで実行し、ネットワーク経由で関連ファイルにアクセスすると、これはすべて正常に機能します。しかし、アプリケーションサーバーにデプロイすると、反対側から何も得られません。ただそこにぶら下がっています。変数は途中で失われているようです。

誰かアイデアはありますか?SSISパッケージから同様の動作を見た人はいますか?

4

2 に答える 2

1

私の提案は、パッケージがどの時点で失敗しているかを判断するために、各SSISタスクの実行後のイベントでログを有効にすることです(まだ有効にしていない場合)。

たとえば、SQLServerエージェントジョブを実行しているユーザーがFTPディレクトリへのアクセス許可を持っていない可能性があります。

于 2011-07-19T09:21:23.917 に答える
1

でSSISパッケージをBusiness Intelligence Development Studio (BIDS)実行すると、資格情報の下で実行され、ファイルが抽出されるフォルダーへの完全なアクセス許可を持っている可能性があります。パッケージをSQLServerエージェントで実行するようにスケジュールすると、パッケージはで実行されSQL Agent Service Account、アカウントがフォルダーにアクセスできない場合があります。

  • データベースをホストしているサーバーにログインする権限がある場合は、サーバーにログインしてパッケージをダブルクリックします。パッケージをダブルクリックすると、dtexecユーティリティが表示されます。ユーティリティでパッケージを実行します。サーバー内から正常に実行された場合、問題は権限に関連している可能性が高くなります。

  • もう1つ確認する必要があるのは、変数@[User::InputFolder]のパスにスペースが含まれている可能性があるかどうかです。その場合、Winzipコマンドライン引数に渡すときに、そのパラメーターを二重引用符で囲む必要があります。

  • SQLジョブをホストしているサーバーからFTPサーバーにアクセスできない可能性はありますか?ファイアウォールブロックが原因でこのような問題が発生しました。

  • パッケージのオプションを有効Loggingにすると、エラーメッセージをキャプチャするのに役立ちます。ロギングを有効にする方法を説明するリンクは次のとおりです。

  • 質問で提供された式は、機能しないため、完全な式ではないと思います。正しく評価するには、このような二重引用符で始める必要があります。表現: "-e " + @[User::InputFolder] + "\\" + @[User::CurrentInputFileName] + " " + @[User::TempFolder]

次の手順では、SSISパッケージを実行するSQLジョブを設定する方法について説明します。SQLServerManagement SQL Server AgentStudioを介してアクセスできる場合は、グラフィカルユーザーインターフェイスを使用してジョブを作成する手順を次に示します。この手順では、SQLエージェントサービスアカウントを使用してSSISを実行するSQLジョブを作成する方法と、別の資格情報を使用して別のアカウントで実行するプロキシを作成する方法を示します。問題の原因が権限である場合は、別のアカウントで実行すると問題の解決に役立つ場合があります。

  1. SQL ServerManagementStudioに移動します。[ジョブ]を展開SQL Server Agentして右クリックしNew Job...、スクリーンショット#1に示すように選択します。

  2. 名前を指定すると、デフォルトで所有者がジョブを作成するアカウントになりますが、要件に応じて変更できます。必要に応じてカテゴリを割り当て、説明も提供します。スクリーンショット#2を参照してください。

  3. [手順]セクションで、New...スクリーンショット#3に示すようにクリックします。

  4. [新しいジョブステップ]ダイアログで、ステップ名を入力します。SQL Server Inegration Services Packageタイプから選択します。このステップはSQL Agent Service Accountデフォルトで実行されます。としてパッケージソースを選択し、File system省略記号をクリックしてパッケージパスを参照します。これにより、パッケージパスにデータが入力されます。スクリーンショット#4を参照してください。の下でステップを実行したくない場合SQL Agent Service Accountは、ステップ#8〜9を参照して別のアカウントを使用する方法を確認してください

  5. パッケージのSSIS構成ファイル(.dtsConfig)がある場合は、[構成]タブをクリックし、スクリーンショット#5に示すように構成ファイルを追加します。

  6. [OK]をクリックすると、スクリーンショット#6に示すように、手順1のパッケージが表示されます。同様に、さまざまなステップを作成できます。

  7. ジョブが作成されたら、ジョブを右クリックしてScript Job as --> CREATE To --> New Query Editor Window、スクリーンショット#7に示すようにスクリプトを生成することを選択できます。

  8. 別のアカウントでSSISステップを実行するには、Management Studioで、Security --> right-click on Cedentials --> select New Credential...スクリーンショット#8に示すようにに移動します。

  9. ダイアログで、New CredentialSQLジョブでSSISステップを実行するための資格情報名、Windowsアカウント、およびパスワードを入力します。スクリーンショット#9を参照してください。スクリーンショット# 10に示すように、資格情報が作成されます。

  10. 次に、プロキシを作成する必要があります。Management Studioで、SQL Server Agent --> Proxies --> right-click on SSIS Package Execution --> select New Proxy...スクリーンショット#11に示すようにに移動します。

  11. スクリーンショット# 12に示すように、[新しいプロキシアカウント]ウィンドウで、プロキシ名を入力し、新しく作成した資格情報を選択し、説明を入力して、SQLServer統合サービスパッケージを選択します。スクリーンショット# 13に示すように、プロキシアカウントを作成する必要があります。

  12. ここで、SQLジョブのステップに戻ると、[実行]ドロップダウンに新しく作成されたプロキシアカウントが表示されます。スクリーンショット#14を参照してください。

お役に立てば幸いです。

スクリーンショット#1:

1

スクリーンショット#2:

2

スクリーンショット#3:

3

スクリーンショット#4:

4

スクリーンショット#5:

5

スクリーンショット#6:

6

スクリーンショット#7:

7

スクリーンショット#8:

8

スクリーンショット#9:

9

スクリーンショット#10:

10

スクリーンショット#11:

11

スクリーンショット#12:

12

スクリーンショット#13:

13

スクリーンショット#14:

14

于 2011-07-19T10:25:16.703 に答える