SQL开发知识:SQL Server Alert发送告警邮件少了的原因
最近突然发现我们部署在数据库上面的告警(Alert),当错误日志里面出现错误时,并不是每个错误日志都会发送邮件出来。如下所示,设置了告警“SQL Server Severity Event 14”
USE [msdb]
GO
IF NOT EXISTS(SELECT 1 FROM msdb.dbo.syscategories WHERE NAME= DBA_MONITORING AND category_ > BEGIN
EXEC msdb.dbo.sp_add_category
@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_responsesis int, 默认值为 0, 这意味着在响应之间没有等待 (每次出现警报都会生成响应)。响应可以是在以下两种形式中的一个, 或者都是:
通过电子邮件或寻呼机发送的一个或多个通知。
要执行的作业。
通过设置此值, 可以防止例如, 在短时间内重复发生警报时发送不需要的电子邮件。
参考资料:
https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-add-alert-transact-sql
最近突然发现我们部署在数据库上面的告警(Alert),当错误日志里面出现错误时,并不是每个错误日志都会发送邮件出来。如下所示,设置了告警“SQL Server Severity Event 14”
USE [msdb]
GO
IF NOT EXISTS(SELECT 1 FROM msdb.dbo.syscategories WHERE NAME= DBA_MONITORING AND category_ > BEGIN
EXEC msdb.dbo.sp_add_category
@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_responsesis int, 默认值为 0, 这意味着在响应之间没有等待 (每次出现警报都会生成响应)。响应可以是在以下两种形式中的一个, 或者都是:
通过电子邮件或寻呼机发送的一个或多个通知。
要执行的作业。
通过设置此值, 可以防止例如, 在短时间内重复发生警报时发送不需要的电子邮件。
参考资料:
https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-add-alert-transact-sql
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 SQL开发知识:SQL Server Alert发送告警邮件少了的原因
相关文章
- sql server 备份还原_什么是SQL
- sql2012安装错误代码0x84b10001_sql server 安装程序遇到以下错误
- SQL手工注入漏洞测试(Sql Server数据库)
- 【开发环境】下载、安装 SQL Server Management Studio ( 下载 SSMS | 安装 SSMS | 连接远程数据库 )
- SQL开发知识:SQL Server数据库中伪列及伪列
- SQL开发知识:Oracle中sql语句(+)符号代表连接的使用介绍
- SQL Server 跨库同步数据
- SQL Server如何通过SQL语句直接操作另一台服务器上的SQL SERVER的数据
- Redis突破SQL:贴近一体化开发体验(redis支持sql)
- SQL Server中如何调用存储过程介绍(sqlserver调用存储过程)
- 使用模拟SQL Server加速系统开发进程(模拟 sqlserver)
- 利用SQL Server一键清空某张表(sqlserver表清空)
- SQL Server用户表管理实践(sqlserver用户表)
- SQL Server更新锁:保护数据的高效守护者(sqlserver更新锁)
- SQL Server精彩展示:运行自如、开发灵活(sqlserver 展示)
- SQL Server: 用密文保护您的数据安全(sqlserver密文)
- SQL Server容器化:高效部署、快速开发(sqlserver容器化)
- SQL Server地图开发:实现地理信息化管理(sqlserver 地图)
- 户使用SQL Server开发前端用户界面(sqlserver前端用)
- SQL Server进程关闭实践(sqlserver关进程)
- SQL Server中的关联查询实例研究(sqlserver关联查询实例)
- SQL Server数据库修复:解决数据损坏问题(sqlserver修复’)
- SQL Server:驱动数据分析和管理升级(软件sqlserver)
- SQL Server表:最佳数据存储方式(表sqlserver)
- SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句