分享方式:


sp_add_alert (Transact-SQL)

適用於:SQL Server

建立警示。

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'

警示的名稱。 名稱會出現在電子郵件或呼叫器訊息中,以回應警示。 它必須是唯一的,而且可以包含百分比 (%) 字元。 @name為 sysname,沒有預設值。

[ @message_id = ] message_id

定義警示的訊息錯誤號碼。 (通常對應至資料表中的sysmessages錯誤號碼。 @message_id為 int,預設值為 0。 如果使用 @severity 來定義警示, @message_id 必須是 0NULL

只有 sysmessages 寫入Microsoft Windows 應用程式記錄檔的錯誤,才會傳送警示。

[ @severity = ] 嚴重性

定義警示的嚴重性層級(從 125) 。 @severity為 int,預設值為 0。 儲存在數據表中 sysmessages 且具有指示嚴重性的任何 SQL Server 訊息都會傳送警示。 如果使用 @message_id 來定義警示, @severity 必須是 0

[ @enabled = ] enabled

指出警示的目前狀態。 @enabled為 tinyint,預設值1為 (已啟用)。 如果 0為 ,則不會啟用警示,而且不會引發。

[ @delay_between_responses = ] delay_between_responses

等候期間,以秒為單位,在警示的響應之間。 @delay_between_responses為 int,預設值0為 ,這表示回應之間沒有等候(每次出現的警示都會產生回應)。 回應可以是下列兩種形式之一或兩種:

  • 透過電子郵件或呼叫器傳送的一或多個通知
  • 要執行的作業

藉由設定此值,就有可能防止在短時間內重複發生警示時傳送垃圾電子郵件訊息。

[ @notification_message = ] N'notification_message'

作為電子郵件、 net send或呼叫器通知的一部分,傳送給操作員的選擇性額外訊息。 @notification_message為 nvarchar(512),預設值為 NULL。 指定 @notification_message 有助於新增特殊附注,例如補救程式。

[ @include_event_description_in = ] include_event_description_in

SQL Server 錯誤的描述是否應該包含在通知訊息中。 @include_event_description_in是 tinyint,預設值5(電子郵件和 net send),而且可以有一或多個這些值與OR邏輯運算子結合。

重要

在未來的 SQL Server 版本中,頁面瀏覽和 net send 選項將會從 SQL Server Agent 中移除。 請避免在新的開發工作中使用這些功能,並規劃修改目前使用這些功能的應用程式。

描述
0 None
1 電子郵件
2 呼叫器
4 net send

[ @database_name = ] N'database_name'

發生錯誤的資料庫,警示必須引發。 如果未 提供@database_name ,則不論發生錯誤的位置為何,警示都會引發。 @database_name為 sysname,預設值為 NULL。 不允許以括弧 ([ ]) 括住的名稱。

[ @event_description_keyword = ] N'event_description_keyword'

必須在錯誤訊息記錄檔中 SQL Server 錯誤的描述中找到的字元序列。 @event_description_keyword為 nvarchar(100),預設值為 NULL。 此參數適用於篩選物件名稱(例如, 。 customer_table

注意

無法使用 Transact-SQL LIKE 運算式模式比對字元。

[ @job_id = ] job_id

要執行以回應此警示之作業的作業標識碼。 @job_id為 uniqueidentifier,預設值為 NULL

必須指定@job_id@job_name,但無法指定兩者。

[ @job_name = ] N'job_name'

要執行之作業的名稱,以回應此警示。 @job_name為 sysname,預設值為 NULL

必須指定@job_id@job_name,但無法指定兩者。

[ @raise_snmp_trap = ] raise_snmp_trap

未在 SQL Server 7.0 版中實作。 @raise_snmp_trap為 tinyint,預設值為 0

[ @performance_condition = ] N'performance_condition'

以 『ItemComparatorValue』 格式表示的值。 @performance_condition為 nvarchar(512),預設值NULL為 ,並包含這些元素。

Format 元素 描述
項目 性能物件、性能計數器或計數器的具名實例。
比較儀 下列其中一個運算子: ><=
ReplTest1 計數器的數值。

[ @category_name = ] N'category_name'

警示類別目錄的名稱。 @category_name為 sysname,預設值為 NULL

[ @wmi_namespace = ] N'wmi_namespace'

要查詢事件的 WMI 命名空間。 @wmi_namespace為 sysname,預設值為 NULL。 僅支援本機伺服器上的命名空間。

[ @wmi_query = ] N'wmi_query'

指定警示 WMI 事件的查詢。 @wmi_query為 nvarchar(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 Agent 服務正在執行中

  • 事件出現在 Windows 應用程式記錄檔中

  • 已啟用警示

  • xp_logevent 產生的事件出現在 master 資料庫中。 因此,xp_logevent除非警示的@database_namemasterNULL,否則不會觸發警示。

權限

依預設,只有 系統管理員 (sysadmin) 固定伺服器角色的成員,才能夠執行 sp_add_alert

範例

下列範例會新增警示(測試警示),以在引發時執行 Back up the AdventureWorks2022 Database 作業。

注意

此範例假設訊息 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