次の方法で共有


sp_add_alert (Transact-SQL)

適用対象: SQL サーバー

アラートを作成します。

Transact-SQL 構文表記規則

構文

sp_add_alert [ @name = ] N'name'
     [ , [ @message_id = ] message_id ]
     [ , [ @severity = ] severity ]
     [ , [ @enabled = ] enabled ]
     [ , [ @delay_between_responses = ] delay_between_responses ]
     [ , [ @notification_message = ] N'notification_message' ]
     [ , [ @include_event_description_in = ] include_event_description_in ]
     [ , [ @database_name = ] N'database_name' ]
     [ , [ @event_description_keyword = ] N'event_description_keyword' ]
     [ , { [ @job_id = ] job_id | [ @job_name = ] N'job_name' } ]
     [ , [ @raise_snmp_trap = ] raise_snmp_trap ]
     [ , [ @performance_condition = ] N'performance_condition' ]
     [ , [ @category_name = ] N'category_name' ]
     [ , [ @wmi_namespace = ] N'wmi_namespace' ]
     [ , [ @wmi_query = ] N'wmi_query' ]
[ ; ]

引数

[ @name = ] N'name'

アラートの名前です。 この名前は、警告に対する応答として送信される電子メールまたはポケットベルのメッセージに表示されます。 一意である必要があり、パーセント (%) 文字を含めることができます。 @namesysname で、既定値はありません。

[ @message_id = ] message_id

アラートを定義するメッセージ エラー番号。 (通常は、 sysmessages テーブルのエラー番号に対応します)。) @message_idint で、既定値は 0 です。 @severityを使用してアラートを定義する場合は、@message_id0またはNULLする必要があります。

Microsoft Windows アプリケーション ログに書き込まれた sysmessages エラーのみがアラートを送信する可能性があります。

[ @severity = ] severity

アラートを定義する重大度レベル ( 1 から 25まで)。 @severityint で、既定値は 0 です。 指定された重大度で Microsoft Windows アプリケーション ログに送信された sysmessages テーブルに格納されている SQL Server メッセージは、アラートを送信します。 @message_idを使用してアラートを定義する場合は、@severity0する必要があります。

[ @enabled = ] enabled

警告の現在の状態を示します。 @enabledtinyint で、既定値は 1 (有効) です。 0場合、アラートは有効ではなく、起動されません。

[ @delay_between_responses = ] delay_between_responses

アラートへの応答の間の待機時間 (秒単位)。 @delay_between_responsesint で、既定値は 0 です。つまり、応答間で待機する必要はありません (アラートが発生するたびに応答が生成されます)。 応答は、次のいずれかの形式または両方の形式で指定できます。

  • 電子メールまたはポケットベルを介して送信された 1 つ以上の通知
  • 実行するジョブ

この値を設定すると、たとえば、アラートが短時間で繰り返し発生したときに、不要な電子メール メッセージが送信されないようにすることができます。

[ @notification_message = ] N'notification_message'

電子メール、 net send、またはポケットベル通知の一部としてオペレーターに送信されるオプションの追加メッセージ。 @notification_messagenvarchar(512) で、既定値は NULL です。 @notification_messageの指定は、修復手順などの特別なメモを追加する場合に役立ちます。

[ @include_event_description_in = ] include_event_description_in

SQL Server エラーの説明を通知メッセージの一部として含める必要があるかどうか。 @include_event_description_intinyint で、既定値は 5 (電子メールと net send) であり、これらの値の 1 つ以上を OR 論理演算子と組み合わせることができます。

重要

ポケットベルとnet sendのオプションは、今後のバージョンの SQL Server でSQL Server エージェントから削除される予定です。 新しい開発作業では、これらの機能の使用を避け、現在これらの機能を使用しているアプリケーションは修正するようにしてください。

Value 説明
0 なし
1 電子メール
2 ポケットベル
4 net send

[ @database_name = ] N'database_name'

どのデータベースでエラーが発生したときに警告を起動するかを指定します。 @database_name指定されていない場合、エラーが発生した場所に関係なくアラートが発生します。 @database_namesysname で、既定値は NULL です。 角かっこ ([ ]) で囲まれた名前は使用できません。

[ @event_description_keyword = ] N'event_description_keyword'

エラー メッセージ ログの SQL Server エラーの説明に含まれている必要がある一連の文字。 @event_description_keywordnvarchar(100)で、既定値は NULL です。 このパラメーターは、オブジェクト名 (たとえば、 customer_table) をフィルター処理する場合に便利です。

Note

Transact-SQL LIKE 式のパターンマッチング文字は使用できません。

[ @job_id = ] job_id

対象となる警告に対する応答として実行するジョブのジョブ ID 番号を指定します。 @job_iduniqueidentifier で、既定値は NULL です。

@job_idまたは@job_nameを指定する必要がありますが、両方を指定することはできません。

[ @job_name = ] N'job_name'

このアラートに応答して実行されるジョブの名前。 @job_namesysname で、既定値は NULL です。

@job_idまたは@job_nameを指定する必要がありますが、両方を指定することはできません。

[ @raise_snmp_trap = ] raise_snmp_trap

SQL Server バージョン 7.0 では実装されていません。 @raise_snmp_traptinyint で、既定値は 0 です。

[ @performance_condition = ] N'performance_condition'

'ItemComparatorValue' の形式で表される値。 @performance_conditionnvarchar(512) で、既定値は NULL であり、これらの要素で構成されます。

Format 要素 説明
品目 パフォーマンス オブジェクト、パフォーマンス カウンター、またはカウンターの名前付きインスタンス。
コンパレータ これらの演算子の 1 つ: ><、または =
Value カウンターの数値。

[ @category_name = ] N'category_name'

アラート カテゴリの名前。 @category_namesysname で、既定値は NULL です。

[ @wmi_namespace = ] N'wmi_namespace'

イベントのクエリを実行する WMI 名前空間。 @wmi_namespacesysname で、既定値は NULL です。 サポートされるのはローカル サーバーの名前空間だけです。

[ @wmi_query = ] N'wmi_query'

アラートの WMI イベントを指定するクエリ。 @wmi_querynvarchar(512) で、既定値は NULL です。

リターン コードの値

0 (成功) または 1 (失敗)。

結果セット

ありません。

解説

sp_add_alert は、 msdb データベースから実行する必要があります。

SQL Server および SQL Server アプリケーションによって生成されたエラー/メッセージが Windows アプリケーション ログに送信され、アラートを生成できる状況は次のとおりです。

  • 重大度 19 以上の sys.messages エラー
  • WITH LOG構文を使用して呼び出されたRAISERRORステートメント
  • を使用して変更または作成された sys.messages エラー sp_altermessage
  • を使用してログに記録されたすべてのイベント xp_logevent

SQL Server Management Studio では、簡単かつグラフィカルに警告システム全体を管理でき、警告インフラストラクチャを構成するのにお勧めです。

アラートが正しく機能していない場合は、次のことを確認します。

  • SQL Server エージェント サービスが実行されている

  • Windows アプリケーション ログにイベントが表示された

  • アラートが有効になっている

  • xp_logevent で生成されたイベントは master データベースで発生します。 そのため、アラートの@database_namemasterまたはNULLでない限り、xp_logeventはアラートをトリガーしません。

アクセス許可

既定では、 sp_add_alert を実行できるのは、 sp_add_alert固定サーバー ロールのメンバーだけです。

次の例では、警告発生時にジョブ Back up the AdventureWorks2022 Database を実行する Test Alert という警告を追加します。

Note

この例では、メッセージ 55001 と Back up the AdventureWorks2022 Database ジョブが既に存在することを前提としています。 この例は説明のみを目的として示されています。

USE msdb;
GO

EXEC dbo.sp_add_alert
    @name = N'Test Alert',
    @message_id = 55001,
    @severity = 0,
    @notification_message = N'Error 55001 has occurred. The database will be backed up...',
    @job_name = N'Back up the AdventureWorks2022 Database';
GO