sp_add_alert (Transact-SQL)

建立警示。

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

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

  • [ @message_id = ] message_id
    定義警示的訊息錯誤號碼。(它通常對應於 sysmessages 資料表中的錯誤號碼。) message_id 是 int,預設值是 0。如果利用 severity 來定義警示,message_id 必須是 0 或 NULL。

    [!附註]

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

  • [ @severity = ] severity
    定義警示的嚴重性層級 (125)。儲存在 sysmessages 資料表中且傳給 Microsoft Windows 應用程式記錄檔的任何 SQL Server 訊息 (具有指定的嚴重性) 都會造成警示的傳送。severity 是 int,預設值是 0。如果利用 message_id 來定義警示,severity 必須是 0

  • [ @enabled = ] enabled
    指出警示目前的狀態。enabled 是 tinyint,預設值是 1 (已啟用)。如果是 0,就表示不啟用,也不引發警示。

  • [ @delay_between_responses = ] delay_between_responses
    這個警示各次回應之間的等待期間 (以秒為單位)。delay_between_responses 是 int,預設值是 0,表示在回應之間不等待 (每次出現警示,都產生回應)。回應可以採用下列兩種形式,或其中之一:

    • 利用電子郵件或呼叫器來傳送的一或多項通知。

    • 要執行的作業。

    在設定這個值之後,便有可能防止在一小段時間內重複出現警示,因而傳送不想要的電子郵件訊息之類的情況。

  • [ @notification_message = ] '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 邏輯運算子,將一或多個這些值組合起來。

    重要注意事項重要事項

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

    描述

    0 (預設值)

    1

    電子郵件

    2

    呼叫器

    4

    net send

  • [ @database_name =] 'database'
    會因發生錯誤而引發警示的資料庫。如果未提供 database,不論是在哪裡發生錯誤,都會引發警示。database 是 sysname。不允許以括號 ([ ]) 括住的名稱。預設值是 NULL。

  • [ @event_description_keyword = ] 'event_description_keyword_pattern'
    SQL Server 錯誤的描述必須符合的字元序列。您可以使用 Transact-SQL LIKE 運算式模式比對字元。event_description_keyword_pattern 是 nvarchar(100),預設值是 NULL。在篩選物件名稱時,這個參數很有用 (如 %customer_table%)。

  • [ @job_id = ] job_id
    當回應這個警示時,所執行之作業的作業識別碼。job_id 是 uniqueidentifier,預設值是 NULL。

  • [ @job_name = ] '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 = ] 'performance_condition'
    這是用 'itemcomparatorvalue'格式來表示的值。performance_condition 是 nvarchar(512),預設值是 NULL,由這些元素組成。

    格式元素

    描述

    Item

    計數器的效能物件、效能計數器或具名執行個體

    Comparator

    它是下列運算子之一:>、< 或 =

    Value

    計數器的數值

  • [ @category_name = ] 'category'
    類別目錄的名稱。category 是 sysname,預設值是 NULL。

  • [ @wmi_namespace= ] 'wmi_namespace'
    要查詢事件的 WMI 命名空間。wmi_namespace 是 sysname,預設值是 NULL。只支援本機伺服器的命名空間。

  • [ @wmi_query= ] 'wmi_query'
    指定警示之 WMI 事件的查詢。wmi_query 是 nvarchar(512),預設值是 NULL。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

備註

sp_add_alert 必須從 msdb 資料庫中執行。

這些都是將 SQL Server 和 SQL Server 應用程式產生的錯誤/訊息傳給 Windows 應用程式記錄檔的情況,因此,可能會產生警示:

  • 嚴重性 19 或更高的 sysmessages 錯誤

  • 利用 WITH LOG 語法來叫用的任何 RAISERROR 陳述式

  • 利用 sp_altermessage 來修改或建立的任何 sysmessages 錯誤

  • 利用 xp_logevent 來記錄的任何事件

SQL Server Management Studio 提供了一種簡單的圖形方式供您管理整個警示系統,建議您利用這個方式來設定警示基礎結構。

如果警示無法正常作,請檢查情況是否如下:

  • SQL Server Agent 服務正在執行。

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

  • 已啟用警示。

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

權限

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

範例

下列範例會在引發時加入執行 Back up the AdventureWorks Database 作業的警示 (Test Alert)。

[!附註]

這個範例假設訊息 55001 和 Back up the AdventureWorks 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 AdventureWorks Database' ;
GO