sp_add_alert (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
定義警示的嚴重性層級 (1 至 25)。儲存在 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