2

特定のフォルダー内のすべての .zip を別のフォルダーに移動しようとしています。ソースフォルダーは別のサーバーにあり、現在使用しています

EXECUTE xp_cmdshell 'copy \\server1\e$\ETL\*.zip \\server2\e$\ETL\'
GO

両方のサーバーにログインしている場合は機能しますが、目標は、このプロセスを VIA sql サーバー ジョブ エージェントを介して自動化することです。私が試してみました

EXECUTE sp_xp_cmdshell_proxy_account 'domain\useracc','pass'
GO
EXECUTE xp_cmdshell 'copy \\server1\e$\ETL\*.zip \\server2\e$\ETL\'
GO

しかし、次のエラーが表示されます。

sp_xp_cmdshell_proxy_account の実行中にエラーが発生しました。考えられる理由: 指定されたアカウントが無効であるか、'##xp_cmdshell_proxy_account##' 資格情報を作成できませんでした。エラー コード: '0'。

また、これが私の解決策であるかどうかもわかりません。これを達成する方法を教えてください。server1 のファイル名は、名前と数量が毎日変わります。

4

2 に答える 2

2

次のことがうまくいったことがわかりました。

  1. コマンド プロンプトで services.msc と入力すると、サーバー上のすべてのサービスの一覧が開きます。

  2. サービスのリストで、SQL Server エージェントを探し、右クリック -> [プロパティ] をクリックします。ログオンタブに移動

両方のサーバーにアクセスできるユーザーにログオンを変更します。次に、サーバー エージェントの CmdExec ジョブ ステップを使用するようにスクリプトを書き直します (Pete Carter に感謝します)。

于 2012-10-05T08:18:46.850 に答える
2

強くお勧めします...xp_cmdshell を使用しないでください。それはあなたの表面領域に大きなセキュリティ全体を開き、攻撃に対して脆弱にします. xp_cmdshell を無効にする必要があります。

代わりに、サーバー エージェントを使用してこれを自動化したい場合は、2 つのオプションがあります。私の好みは、ファイル システム タスクを含む単純な SSIS パッケージを作成し、このパッケージをサーバー エージェントでスケジュールすることです。SSIS は、この種のタスクには十分に活用されていませんが、実際には非常に優れています。

または、サーバー エージェントの CmdExec ジョブ ステップを使用するようにスクリプトを書き直してください。これにより、xp_cmdshell を有効にする必要がなくなり、攻撃対象領域が減少します。

于 2012-10-05T07:32:56.390 に答える