失敗したジョブを通知するために、SQL Serverエージェント通知をよく使用します。通常、ジョブは1時間ごとに実行されるので、ジョブが失敗した場合にメールをいくつか受信してもかまいません。
しかし、今は毎分ジョブを実行し、実行したままにしたいと考えています。数時間失敗しても何百通もメールを受け取りたくありません。
SQL Serverエージェントがジョブに対して送信する電子メールの数に制限を設定できますか?
この機能はすでにSQL Serverに組み込まれています。私も同様の状況で、コードを50000を超えるカスタムエラー番号を使用するように変更し、Management StudioのSQL Server Agent | Alertsの下に、そのカスタムエラー番号を使用して新しいアラートを設定しました。 [オプション]セクションの下には、1時間あたりの通知の量を軽減するために使用できる[応答間の遅延]セクションがあります。私はプロセスを10秒ごとに監視していましたが、重大な状況がいつ始まったかを知りたいがアラートに圧倒されないようにしたかったので、5分ごとに通知しました。
ジョブが失敗を報告できる回数を制限するために利用できるオプションはないと思います。
頭に浮かぶのは、自分で通知を処理することです。 SQL Serverにジョブの失敗時に電子メールを送信させないでください。その電子メールをジョブスクリプトの一部にしてください。メールアクティビティをログに記録し、ジョブが送信するタイミングを制御できます。
ジョブが単一のステップである場合、2番目のステップを追加し、最初のジョブが失敗した場合の失敗時のアクションは、メールを送信する(または送信しない)次のステップに進むことになります。最初のステップが成功したら、ジョブレポートの成功を終了します。
複数のステップがあり、そのうちの1つが失敗した場合に失敗を通知する必要がある場合は、そのエラーチェックおよび通知ルーチンをステップ自体に追加する必要があります。
何ができるかの概要。
1.ジョブのメール通知をオフにする
2。すべての失敗をテーブルに記録
3。ジョブステータスの要約データを示す、希望する頻度で1つ以上のジョブを実行します
メールの件名に「Job test Failed」や「job test succeded」などの一意であると識別されるものが含まれている場合は、もう1つのアプローチが機能します。
次に、sysmail_allitems
以下のように
Pseduoロジック:
IF (SELECT COUNT(*) from sysmail_allitems where subject like 'Job test%'
and sent_status='sent' and cast(sent_date as date)=cast(getdate() as date))=2
Begin
Return--there exists a record so dont send any emails
END