【SQL Server】ジョブの実行時エラーを「データベースメール」で通知する設定方法

MS SQL Server
スポンサーリンク

SQL Serverの「ジョブ」機能でバックアップ処理やデータ更新処理を自動化しているケースも多いかと思いますが、ジョブが失敗しているのに気付けなかったことは無いでしょうか?
かく言う私も、最近ジョブの失敗に気付けずに数日バックアップ処理が正常終了していなかったことがあり、ジョブ失敗時にアラートメールを送信するように設定しました。
設定手順が若干面倒なので、今回の記事ではその手順を紹介します。

当記事の動作環境

当作業では以下のバージョンのSQL ServerSSMSの組み合わせで実施しています。
他のバージョンでも設定に変わりはないはずですが、一応動作環境を明記しておきます。

SQL Serverバージョン:Microsoft SQL Server 2017
SSMSバージョン:SQL Server Management Studio v18.4

設定手順 「データベースメール」登録

SQL Server Management Studio(以降はSSMSと呼称)」を介して「データベースメール」というSQL Serverの機能を設定し有効化する手順を紹介していきます。
尚、当作業はSQL Serverの管理ユーザーの「sa」でログインして実施しています。

「データベースメール」設定画面を開く

SSMSの画面左側「オブジェクトエクスプローラー」から[管理]→[SQL Serverログ]を順に開きます。

[データベースメール]を右クリックして[データベースメールの構成]を選択します。

「データベースメール構成ウィザード」の設定手順

「データベースメール構成ウィザード」起動画面表示

「データベースメール構成ウィザード」が起動します。
「次へ」を押下して先に進みます。

「構成タスクの選択」

当ウィザードで実施する作業を選択します。
今回は新しくメール送信用のプロファイルを作るので、一番上にチェックを付けて「次へ」を押下します。
※既に登録済みのアカウントやプロファイルを変更したり削除する場合は二つ目の「データベースメールアカウントおよびプロファイルを管理する」

「データベースメール」機能が有効化されていない場合は以下の確認メッセージが出ます。
その場合は「はい」を押下して処理を進めます。

「新しいプロファイル」

新しく作成するプロファイルの名称やSMTPアカウントを登録します。
尚、プロファイル名は日本語でも問題ありません。
プロファイル名を入力し、SMTPアカウント枠右側の「追加」ボタンを押下します。

「新しいデータベースメールアカウント」

データベースメールのSMTPアカウント情報を登録します。
最低限必要な入力項目としては以下です。

アカウント名:smtpのユーザー名ではなくSQLServer内の識別用の任意メールユーザー名
電子メールアドレス:送信元として使用するメールアドレス
サーバー名:smtpサーバーのホスト名かIPアドレス
ポート番号:smtpで使用しているポート番号

上記以外の項目は環境によって設定してください。
入力が完了したら「OK」を押下します。

「新しいプロファイル」に戻る

「新しいプロファイル」画面に戻ります。
因みに今回はプロファイル名を「ジョブ通知用プロファイル」と指定しました。
「SMTPアカウント」枠には先ほど追加したsmtpのアカウント情報が追加されています。

「プロファイルセキュリティ管理」

新しく作成するプロファイルに対してアクセスできるユーザーやロールなどを指定します。
特にセキュリティ上の制限を設けない場合は何も指定しないまま画面下部の「次へ」を押下します。

「システムパラメーターの構成」

メール送信に関する各パラメーターを指定します。
初期値で変更する必要が無ければそのまま「次へ」を押下します。

「ウィザードの完了」

ウィザードで指定した各設定項目の確認画面です。
設定に誤りがあった場合は「戻る」で前の画面に戻れます。
設定内容に問題が無ければ「完了」を押下してウィザードを完了させます。

処理状況を表示する画面が表示されます。
通常は瞬時に処理は完了します。
「閉じる」ボタンを押下すると画面が閉じます。

メールのテスト送信

上記作業で作成したプロファイルを使用し、テストメールを送信します。

SSMSの画面左側「オブジェクトエクスプローラー」から[管理]→[SQL Serverログ]を順に開き、[データベースメール]を右クリックして[テスト電子メールの送信]を選択します。

テスト送信を行うメールの宛先アドレス、件名、本文を入力する画面が表示されます。
件名と本文には初期値の文面が入っていますが、宛先は空白なので、宛先のメールアドレスを入力して「テスト電子メールの送信」ボタンを押下します。

その際にエラーが出ず、指定した宛先アドレスにメールが届けば「データベースメール」は適切に登録できています。



設定手順 メール送信用オペレーターを作成

ジョブの実行等を行っている「SQL Serverエージェント」にてメールを送信する場合は、上項で作成したプロファイル以外にも、「SQL Serverエージェント」内で「オペレーター」を作成する必要があります。

「新しいオペレーター」作成画面

SSMSの画面左側「オブジェクトエクスプローラー」から[SQL Serverエージェント]→[オペレーター]を右クリックして[新しいオペレーター]を選択します。

入力欄が幾つかありますが、入力が必要な指定項目はオペレーターの「名前」と「有効」のチェックと通知オプション内の「電子メール名」の三か所です。

名前:オペレーターの名前を入力します。
通知オプション 電子メール名:送信で使用するメールアドレスを入力します。

入力したら「OK」ボタンを押下します。

SSMSの画面左側「オブジェクトエクスプローラー」の[SQL Serverエージェント]→[オペレーター]内に今回作成したオペレーター名が追加されます。
今回の例では「JobAlertOperator」という名前で作成しました。

設定手順 SQL Server エージェントのプロパティ設定

「SQL Server エージェント」のプロパティを表示して「メールプロファイル」を有効にする設定を追加します。

「SQL Server エージェントのプロパティ」

SSMSの画面左側「オブジェクトエクスプローラー」の[SQL Serverエージェント]を右クリックして[プロパティ]を選択します。

「SQL Server エージェントのプロパティ」画面を表示し、画面左側の「ページの選択」で「警告システム」を選択すると、以下の状態で表示されます。
画像の赤枠部分を設定します。

「メールセッション」の「メールプロファイルを有効にする」のチェックを付けることで「メールシステム」及び「メールプロファイル」が選択可能になります。

メールシステム:「データベースメール」しか選択できません。
メールプロファイル:前作業で作成した「ジョブ通知用プロファイル」を選択します。

選択後、「OK」を押下して変更を適用します。

設定手順 ジョブのプロパティ設定

「SQL Server エージェント」の[ジョブ]内の通知設定をしたいジョブのプロパティを表示してメール送信設定を追加します。

「ジョブのプロパティ」

SSMSの画面左側「オブジェクトエクスプローラー」の[SQL Serverエージェント]→[ジョブ]内からメール通知をしたいジョブを選択して右クリック→[プロパティ]を選択します。

「ジョブのプロパティ」画面左側の「ページの選択」内の「通知」を選択し、画面右側の「電子メール」にチェックを付けて、隣のコンボボックスを開くと、先ほど作成した「JobAlertOperator」が表示されるようになります。
更にメール通知のタイミング設定の初期値は「ジョブ失敗時」になっている為、ジョブ失敗時にメール送信をしたい場合はこのまま画面下部の「OK」ボタンを押下して登録します。

尚、メール送信の条件は今回紹介した「ジョブ失敗時」を含め、以下の三種類あります。
利用したい状況に合わせて使い分けてください。

■通知条件設定項目
・ジョブ失敗時:ジョブが失敗して正常完了しなかった場合
・ジョブ成功時:ジョブが正常に完了した場合
・ジョブ完了時:ジョブの失敗、成功に関わらず完了した場合

設定手順 SQL Server エージェントの再起動

最後に「SQL Server エージェント」のサービスだけをSSMSにて再起動します。

これですべての設定作業は完了です。

その後ジョブを実行し、指定した通知条件時にメールが送信されれば設定作業成功です。
設定完了後のジョブ初回実行時は通知条件設定を「ジョブ完了時」に指定しておき、まずジョブが成功しても失敗してもどちらでも良いので、メールが飛ぶかどうかを確認しておくことをおススメします。

最後に

ただジョブ失敗時に自動的にメール通知をさせたいだけなのに、こんなに設定が必要なのはさすがにどうかと思いますが、一応今回の手順で設定して頂ければメールは飛ぶはずです。
ただ、インターネット上で調べてみると、設定の順番によっては適切に設定が反映されずメール送信に失敗する場合もあるようです。
もし上手く動かなかった場合は、対象のジョブを右クリックしてジョブの履歴を表示させると、メール送信についてもエラーメッセージが表示されていると思うので、都度そのメッセージを確認して対応方法を調べるといった感じになります。

今回も読んで頂きましてありがとうございました。
また次回もよろしくお願いいたします。