web-dev-qa-db-ja.com

サーバー間でファイルをコピー中にSSISファイルシステムタスクエラーが発生しました

サーバーAとサーバーBの2つのサーバー間でファイルを手動でコピーでき、どちらの側のフォルダーにもアクセス許可があります。

ファイルシステムタスクを使用してファイルをコピーしています。

ソースと宛先がサーバー内にある場合、パッケージはVisualStudioとSSISDBで正常に機能します。

ソースと宛先が異なるサーバーにある場合、パッケージはVisual Studioで正常に機能しますが、パッケージはSSISDBで失敗します。アクセスが拒否されたと言っています。私のアカウントはSSISDBにマップされています。

この問題を解決するためのアイデア。

パッケージは、SQLServerエージェントJoBを使用して正常に実行されます。ジョブはプロキシアカウントを介して実行されます。

プロキシアカウントを介して実行するようにパッケージを構成する方法はどれでも。

エラースクリーンショット

enter image description here

11
Manoj Nayak

まず、@ Nick.McDermaidは、コメントに非常に役立つリンクを提供して、詳細を確認しました Integration Services Catalogはパッケージの実行にどのユーザー資格情報を使用しますか?

推奨される解決策

検索した後、この問題を引き起こす可能性のある多くの問題があるので、私はあなたの問題を解決できる多くの解決策を提供します。

パッケージSSISDBを実行する場合

1。 SQL Serverアカウントのアクセス許可

指定されたパスでログインしているアカウントに読み取りと書き込みのアクセス許可を追加します

2。ネットワークアカウントにWindows認証を追加します

ネットワークアカウント(SQLサーバーエージェントでプロキシとして使用される)のWindows認証ログインを追加し、それを使用してパッケージを実行できます。

SQLエージェントからパッケージを実行する場合

これはあなたのケースではありませんが、これらの情報が役立つかもしれません

1。 SQL Serverアカウントのアクセス許可

指定したパスの次のアカウントに読み取りと書き込みのアクセス許可を追加します。

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

2。プロキシの設定

SSISパッケージのプロキシを設定し、そのプロキシアカウントを使用してジョブを実行できます。

詳細については、次のリンクのいずれかを参照してください。

3。ネットワークドライブをSQLServerインスタンスにマップします

一部の記事では、(OSではなく)SQL Serverで使用しているネットワークドライブをマップすることを提案しています。詳細については、次のリンクのいずれかを参照してください。

4。 SysAdminロールの追加

次のアカウントにSysAdminロールを追加します。

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

同様の問題を抱えている他のリンク

6
Hadi

ドメインアカウントのMSDBのアクセス許可を確認しましたか。私はこれらの手順に従います。私は同様の問題を抱えています

1)パッケージをサーバーにデプロイします(すでに行っているように)

2)パッケージがロードされ、SSISDBのIntegrationServicesカタログで利用可能であることを確認します

3)プロジェクトを再デプロイして、試してください。

これらがすべて正常で、SSISDBでまだパッケージが失敗する場合は、CMD(DTEXUI /ファイル/「パッケージパス」)を使用してWindowsスケジューラタスクを試してみます。 Windowsスケジューラについて話すことが適切でない場合は、お詫び申し上げます。

1
Ven

投稿された回答とコメントには、多くの推測と赤いニシンがあります。 SQLエージェントプロキシ、マップされたドライブ、MSDB、またはsysadminとは何の関係もありません。最終的に質問から収集したように、SQLエージェントでの実行は問題ありません。問題が発生するのは、IntegrationServicesカタログを右クリックしてインタラクティブに実行したときだけです。

質問の最後の部分は、根本原因がここで理解されていることを示しています。

プロキシアカウントを介して実行するようにパッケージを構成する方法はどれでも。

インタラクティブユーザー(カタログを右クリックするユーザー)には権限がないため、権限を持つ別のユーザーとしてカタログから実行する方法が必要です。

確認のために:SSISログでコンテキストの表示をクリックすると、実行されたユーザーが表示されます。これは、SQLエージェントからの正常なパッケージ実行とは異なります。

カタログの実行メニューと構成メニュー、およびcreate_execution spを調べましたが、別のユーザーとして実行する方法がわかりません。

私は2つの提案があります:

  1. SSMSを起動するときに[実行]を使用して、別のユーザーとして実行する
  2. パッケージをSQLエージェントでラップするだけで、他のアカウントを使用してパッケージを実行できます(SQLエージェントサービスアカウントまたはプロキシのいずれか)。
1
Nick.McDermaid

しばらく前に同様の問題が発生しました。ファイルをロードする前に、サーバーからSSISを実行しているサーバーにファイルをコピーする必要がありました。

パッケージがローカルディレクトリのみを使用するように構成されている場合は、毎回機能しました。手動で起動した場合は、別のマシンで動作しました。しかし、SQL Agent +さまざまなマシンに関しては、失敗しました。

SQLログをクロールし、Visual Studioで少しスクリプトを作成することで、ローカルアカウントとADアカウントに問題があることがわかりました。

私はこの問題を次のように解決しました:

  1. sSISマシンで十分に付与した非対話型ユーザーアカウントを作成します(SQL Serverでは多かれ少なかれsysadmin、サーバーではごくわずかなフォルダーアクセス...ニーズに適合します)
  2. このアカウントに他のサーバーのフォルダーへのアクセスを許可する(ACLを介して)
  3. この「正当な」ADアカウントを使用するようにSQLAgentサービスを更新する
  4. 完了!

これは、ほぼ1年以来、問題なく毎日機能しています。

1
xum59