web-dev-qa-db-ja.com

SQL Server 2012(SqlServerAgentジョブを使用)からN日より古いリモートファイルをスケジュールで削除する方法

MS SQL Server 2012 R2(Windows Server 2008R2、Windows 7 Prof)のSqlServer AgentジョブでPowerShellコマンドを実行するのに苦労しています

(たとえば、リモートファイル共有で7日より古い.bakファイルを削除する必要があります。

コマンドをSqlServerAgentジョブに挿入する前に、Windowsコマンドラインから実行しようとしました。

  • forfilesを使用
    forfiles /P "\\RemoteHostName\sharedFolderName" /s /m *.bak /D -7 /C "cmd /c del @path"

    エラーを与える:
    "エラー:UNCパス(\ machine\share)はサポートされていません"

  • Windows PowerShellを使用

    dir \\ RemoteHostName\sharedFolderName |? {$ _。CreationTime -lt(get-date).AddDays(-7)} |デル

後者は、Windows PowerShellコマンドプロンプトから使用されたときに必要なリモートファイルを削除しますが、SqlServerAgentジョブで実行されると失敗します-失敗

そのようなSqlServerAgentジョブの履歴は次のように引用して示しています。

  • 仕事は成功した。ジョブはユーザーdomain\domainAccountNameによって呼び出されました。実行する最後のステップはステップ1でした

    • ユーザーとして実行:localHostName\sqlbackup。ジョブスクリプトで次のエラーが発生しました。これらのエラーはスクリプトを停止しませんでした。PowerShellScriptの行でジョブステップがエラーを受け取りました。対応する行は 'dir "\\ RemoteHostName\sharedFolderName \"です|? {$ _。CreationTime -lt(get-date).AddDays(-7)} | del '。スクリプトを修正し、ジョブを再スケジュールしてください。 PowerShellから返されるエラー情報は次のとおりです: '存在しないため、パス' \\RemoteHostName\sharedFolderName 'が見つかりません。'プロセス終了コード0。ステップは成功しました。

    enter image description here

失敗したジョブとジョブステップの緑色のチェックマークに注意してください

もう一度、結果のテキスト出力を拡大します。

enter image description here

また、このSqlServerAgentジョブステップを実行すると、「処理中」、次に「成功」​​と表示されます。

enter image description here

ただし、必要なファイルを削除できないままです。

質問

  1. エラーを含むジョブとステップを「成功」ではなく「失敗」と表示する方法は?
  2. Windows PowerShellコマンドを使用した古いファイルのパージがコマンドラインプロンプトから成功し、SqlServerAgentジョブとステップ内から失敗するのはなぜですか?

    2a。 SQL Server 2012からスケジュールに従って古いリモートファイルを削除することでどのように成功しますか?

PS
SQL Serverエージェントジョブプロキシを使用しています この回答 リモート/ターゲットおよびローカル/ソースホストで同じ/同じ名前のローカルWindowsユーザーアカウントを使用していますsqlbackupとパスワード

Windowsタスクスケジューラでのスケジュール設定と同じストーリー-前の手順でリモートの場所(ここでは説明外)へのコピーは成功しますが、ジョブと手順は何も削除せずに「成功」​​します。そして、私はすべてをSQL Server SqlServerAgentジョブに集中することに興味があります(ただし、外部にはありません)。

ForfilesはUNCでは機能しません。コツは、pushdを使用して共有UNCをマッピングすることです。これは一時的なドライブをマップして入力しました。ポッドはするだろう

pushd\RemoteHostName\sharedFolderName forfiles/P "\ RemoteHostName\sharedFolderName"/s/m * .bak/D -7/C "cmd/c del @path" popd

3
Woody

PowerShellエラーが原因でSQLエージェントのステップが失敗するようにするには、$erroractionpreference設定を調整する必要があります。既定では、この値はContinueに設定されているため、SQL Serverエージェントが実際のPowerShellコマンドで問題が発生したことを検出するためのエラーは発生しないため、手順は成功を示します。

これを修正する必要があるスクリプトの先頭に配置できます:$erroractionpreference="stop"。これにより、PowerShellがSQL Serverエージェントプロセスに細流するエラーが発生します。

3
user507

これを達成しました(SQL Server 2012からN日より古いリモートファイルをスケジュールどおりに削除する方法(SqlServerAgentジョブを使用))。

SSASデータベースのバックアップを実行していて、別のサーバーで古いバックアップファイルを削除する必要がありました。

参照してください run-a-powershell-script-on-a-different-server-from-inside-a-sql-server-job

0

SQL Serverエージェントを実行するには、ドメインアカウントを使用します。そのアカウントに、削除するファイルを含むネットワーク共有に対する変更権限を付与します。

0
user30038