使用SQL Server代理警报的前提条件
1、创建操作员,接收消息的用户
2、创建警报,满足某种条件触发警报,并作出响应(执行作业或/和通知操作员)
3、配置数据库邮件,用于发送消息通知
4、SQL Server代理->属性->警报系统->启用邮件配置文件,选择对应的邮件系统及配置文件
详细配置步骤请参考SQL Server代理警报和操作员和SQL Server代理配置数据库邮件
测试服务器按上述方式配置后,模拟满足触发警报的条件,并没有出现预期结果,SQL Server代理日志如下:
[264] 尚未建立电子邮件会话就试图发送电子邮件。搜索问题只需重启代理服务即可。
一、如何给多人发送警报?
方法一、操作员->常规->电子邮件名称,按照mail1;mail2;mail3这种格式,将需要发送的邮件地址加上:
方法二、创建新的操作员,然后在警报的响应页勾选要通知的操作员:
下图是电子邮件名称带多个地址及通知多个操作员的邮件发送记录:
二、上次警报的日期和上次响应的日期是如何界定?
满足条件触发警报,更新上次警报的日期;如果响应中有设置执行作业或/和通知操作员,则执行这些操作时,更新上次响应的日期。
msdb..sp_sqlagent_get_perf_counters is used to fire the the sqlagent alerts.
Whenever there is alert set,this procedure is executed in background to determine the threshold limits, be it an alert for any performance condition.
You mention that it runs frequently,but by default its 20 seconds.Theres a registry key to change the interval HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.SQL08R2\SQLServerAgent\PerformanceSamplingInterval
默认每20秒检查是否触发警报,只有满足条件才会触发,然后根据响应执行作业或/和通知操作员。响应受限于选项中的[两次响应之间的延迟时间],延迟时间在警报太频繁时,避免发送太多通知挤爆邮箱。
测试创建的警报如下:
只有SQL Server特定的性能计数器,没有如CPU这类的系统计数器:
警报对应的数据库邮件日志(日志记录级别设置为详细)如下:
由于测试中一直满足触发警报的条件,从数据库邮件日志也可以看出每20秒发送一次邮件。
收到的警报邮件如下:
注意响应操作得到的数据是响应时刻的数据。例如,在上面的测试中将[两次响应之间的延迟时间]设置为10分钟,实际上每20秒会触发警报,但每10分钟才发送一次邮件。如果我们在第8分钟时修改Log File(s) Used Size (KB),在第10分钟发送的邮件将是修改后的数值信息。
09:32 2016/5/25 操作员的电子邮件名称带有多个邮件地址时,响应邮件有时会发送失败。下面是测试样例,[两次响应之间的延迟时间]设置为2分钟,sysmail_mailitems显示总共发送7封邮件,3封发送失败:
收到的邮件如下:
数据库邮件日志如下:
根据提示的链接,查找DT:SPM代码对应的说明:
451 DT:SPM ,please try again 邮件正文带有垃圾邮件特征或发送环境缺乏规范性,被临时拒收。请保持邮件队列,两分钟后重投邮件。需调整邮件内容或优化发送环境;
550 DT:SPM 邮件正文带有很多垃圾邮件特征或发送环境缺乏规范性。需调整邮件内容或优化发送环境;
554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;
意思就是邮件正文不合规,被当作垃圾邮件拒收。如果电子邮件名称只含一个地址就不会出现这样的错误。因此为了能及时收到通知消息,建议在电子邮件名称只包含一个地址。可以在邮件系统将多个用户合并到一个分组。