web-dev-qa-db-ja.com

SQLエージェントジョブ、ジョブが完了したにもかかわらずステップがまだ実行されていることがジョブ履歴に表示されるのはなぜですか

Powershellを最初のステップとして実行するSQLエージェントジョブがあります(合計3つのステップがあります)。

この手順では、3分の再試行間隔で2回の再試行を行うように設定しました。ジョブ履歴を調べると、step_1はまだ実行中であること、および完了したことを示しています。実行するたびに(少なくとも昨年)これを実行しました。私のpowershellから何かが欠けていますか?それとも、SQLエージェント自体と関係がありますか?

sysjobhistoryテーブルのクエリの詳細(パイプ区切り):

Step_name|step_id|run_date|run_time|run_duration|run_status

(Job outcome)|0|2014/02/12|01:20:00|5|Succeded

Record volume space to file|1|2014/02/12|01:20:00|2|In Progress

Record volume space to file|1|2014/02/12|01:20:00|2|Succeded

Load Volume Space|2|2014/02/12|01:20:02|1|Succeded

Record database data file space|3|2014/02/12|01:20:03|2|Succeded

ステップ1は、次のPowershellを実行します。

gwmi win32_volume | select name, capacity, freespace | Export-Csv c:\temp.tmp
6
Jake

Hey Scripting Guy!についてChad MillerはTechnetのブログで、Windows PowershellコマンドをSQLエージェントジョブとして実行し、まだ構文エラーがない場合、コマンドがエラーを生成する(たとえば、使用できないサーバーからオペレーティングシステム情報を取得しようとする)と報告しています。 SQL Serverエージェントジョブは成功を報告します。さまざまなオプションを使用してエラー処理を実装する方法の手順については、投稿のヒント#10を確認してください。たとえば、SQLエージェントでエラーを続行したり、エージェントジョブを停止したりできます。報告された「成功」は実際には成功していない可能性があります。

10-tips-for-the-sql-server-powershell-scripter

1
huckleseed

SQLエージェントジョブの外でPowerShell行を実行してみましたか?これは、スクリプトが失敗しているかどうかを識別するのに役立ちます。 user3465374がすでに述べたように、スクリプトはジョブステップに失敗することなく失敗する可能性があります。

ドライブCのルートではなくフォルダーにCSVファイルを作成するようにエクスポートを修正することもお勧めします。Windows2008以降では、デフォルトのアクセス許可は各ドライブのルートで制限されています。そのため、export-csvコマンドがアクセス拒否エラーを返している可能性があります。

1
Simon Byles

SQL Serverエージェントを再起動して、もう一度テストしてみてください。 sysjobhistoryの結果から、PowerShellエラーが原因ではないことがわかりました。成功の記録がありますが、進行中の記録もあります。 SQLエージェントが時々非常に奇妙に動作するのを見てきましたが、それを再起動するだけで問題を解決できました。たとえば、ジョブがスケジュールの実行に間に合わず、次回の実行時間が過去になっているために、再度スケジュールで実行されることはありません。また、あなたのように2倍になっているのを見たことがありませんが、記録されていない完了記録は確実に見ました。

0
SQL Hammer

PowerShellは、SQLエージェントサービスの起動に使用されるWindowsアカウントで実行されることを念頭に置いてください。PowerShellプロンプトまたはGUIプロンプト(UACなど)が原因で、SQLエージェントからプロセスが完了しない可能性があります。視点。

SQL ServerがSQLエージェントと同じWindowsアカウントで実行されている場合、SSMSから次のコマンドを実行して何が起こるかを確認できます。

exec xp_cmdshell 'powershell.exe "gwmi win32_volume | select name, capacity, freespace | Export-Csv c:\temp.tmp" 2>C:\PowerShell.stderr.log 1>C:\PowerShell.stdout.log'
exec xp_cmdshell 'type C:\temp.tmp'
exec xp_cmdshell 'type C:\PowerShell.stderr.log'
exec xp_cmdshell 'type C:\PowerShell.stdout.log'

同様に、以下を.cmdファイルに入れて、代わりにSQLエージェントジョブから.cmdファイルを起動することができます。

powershell.exe "gwmi win32_volume | select name, capacity, freespace | Export-Csv c:\temp.tmp" 2>C:\PowerShell.stderr.log 1>C:\PowerShell.stdout.log

どちらの方法でもGUIプロンプトは表示されませんが、PowerShellプロンプトがある場合は、.logファイルの1つにキャプチャする必要があります。

Antがお役に立てば幸いです。

0
AlwaysLearning