sp_add_alert (Transact-SQL)
適用於:SQL Server
建立警示。
語法
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 必須是 0
或 NULL
。
只有 sysmessages
寫入Microsoft Windows 應用程式記錄檔的錯誤,才會傳送警示。
[ @severity = ] 嚴重性
定義警示的嚴重性層級(從 1
到 25
) 。 @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_name為master
或NULL
,否則不會觸發警示。
權限
依預設,只有 系統管理員 (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