最近突然發現我們部署在資料庫上面的告警(Alert),當錯誤日誌裡面出現錯誤時,並不是每個錯誤日誌都會發送郵件出來。如下所示,設定了告警“SQL Server Severity Event 14”

USE [msdb]

GO

IF NOT EXISTS(SELECT 1 FROM msdb.dbo.syscategories WHERE NAME='DBA_MONITORING' AND category_class=2)

BEGIN

EXEC msdb.dbo.sp_add_category

@class=N'ALERT',

@type=N'NONE',

@name=N'DBA_MONITORING' ;

END

GO

IF EXISTS(SELECT name FROM msdb.dbo.sysalerts WHERE name= N'SQL Server Severity Event 14')

EXEC msdb.dbo.sp_delete_alert @name=N'SQL Server Severity Event 14'

GO

EXEC msdb.dbo.sp_add_alert @name=N'SQL Server Severity Event 14',

@message_id=0,

@severity=14,

@enabled=1,

@delay_between_responses=60,

@include_event_description_in=1,

@category_name=N'DBA_MONITORING',

@job_id=N'00000000-0000-0000-0000-000000000000'

GO

EXEC msdb.dbo.sp_add_notification @alert_name=N'SQL Server Severity Event 14', @operator_name=N'YourSQLDba_Operator', @notification_method = 1

GO

然後我嘗試用sa登入(sa已經被禁用)了三次,但是我只收到了一封郵件。特意查看了一下sp_add_alert的官方文件,才知道出現這個原因,是因為引數@delay_between_responses的值設定緣故,通過設定該值,可以防止在在短時間內重複傳送一些不需要的電子郵件。如上所示,一分鐘內,即使錯誤日誌裡面出現了大量類似的錯誤,也只會傳送一封告警郵件。其實只是為了減少傳送告警的頻率,如果你想當錯誤日誌裡出現這個級別的告警時,都必須傳送告警郵件,可以將其值設定為0。但是有時候,如果設定為0,你會收到鋪天蓋地的郵件。其實這個小問題,只是因為以前沒有特意留意這個引數而已。存粹屬於沒有徹底瞭解這些功能罷了。

@delay_between_responses = ] delay_between_responses

The wait period, in seconds, between responses to the alert. delay_between_responsesis int, with a default of 0, which means there is no waiting between responses (each occurrence of the alert generates a response). The response can be in either or both of these forms:

·

·         One or more notifications sent through e-mail or pager.

·

·         A job to execute.

·         By setting this value, it is possible to prevent, for example, unwanted e-mail messages from being sent when an alert repeatedly occurs in a short period of time.

@delay_between_responses =] delay_between_responses

警報響應之間的等待時間 (以秒為單位)。delay_between_responsesis int, 預設值為 0, 這意味著在響應之間沒有等待 (每次出現警報都會生成響應)。響應可以是在以下兩種形式中的一個, 或者都是:

通過電子郵件或尋呼機發送的一個或多個通知。

要執行的作業。

通過設定此值, 可以防止例如, 在短時間內重複發生警報時傳送不需要的電子郵件。

參考資料:

https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-add-alert-transact-sql