这里有新鲜出炉的 SQL Server 教程, 程序狗速度看过来!
SQL Server 数据库
SQL Server 即 Microsoft SQL Server SQL 是英文 Structured Query Language 的缩写, 意思为结构化查询语言 SQL 语言的主要功能就是同各种数据库建立联系, 进行沟通按照 ANSI(美国国家标准协会)的规定, 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_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_responsesis int, 默认值为 0, 这意味着在响应之间没有等待 (每次出现警报都会生成响应)响应可以是在以下两种形式中的一个, 或者都是:
通过电子邮件或寻呼机发送的一个或多个通知
要执行的作业
通过设置此值, 可以防止例如, 在短时间内重复发生警报时发送不需要的电子邮件
参考资料:
https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-add-alert-transact-sql
来源: http://www.phperz.com/article/18/0315/352273.html