SQL Server警报未触发求助:仅带WITH LOG的语句才触发邮件
问题解答
核心原因
SQL Server Agent基于错误严重性级别创建的警报,仅会触发那些被**写入SQL Server错误日志(及Windows事件日志)**的错误,会话级的非日志错误不会被捕获。
具体分析
RAISERROR带/不带WITH LOG的差异- 不带
WITH LOG的RAISERROR('Test Alert Error', 16,1):仅在当前会话抛出错误,不会写入SQL Server错误日志,因此Agent警报无法检测到这个事件。 - 带
WITH LOG的RAISERROR:会将错误信息写入SQL Server错误日志和Windows应用程序日志,Agent的警报机制会监控这些日志,因此能触发警报。
- 不带
select 1/0的情况
这个语句产生的16级错误属于会话级运行时错误,默认不会被写入SQL Server错误日志,所以同样无法触发基于严重性级别的警报。
解决方案
如果需要捕获所有16级错误(包括会话级未写入日志的错误),可以选择以下两种方式:
- 使用WMI警报:通过WMI事件监控SQL Server的
ErrorReported事件,这种方式可以捕获会话级错误。示例创建语句:USE [msdb] GO EXEC msdb.dbo.sp_add_alert @name=N'Test Alerts - WMI', @wmi_namespace=N'\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER', @wmi_query=N"SELECT * FROM ErrorReported WHERE Severity = 16", @enabled=1, @include_event_description_in=1; GO EXEC msdb.dbo.sp_add_notification @alert_name=N'Test Alerts - WMI', @operator_name=N'alertuser', @notification_method=1; GO - 修改服务器配置(谨慎使用):通过
sp_configure开启error log severity选项,让指定严重性以上的错误自动写入日志。但这种方式会增加日志量,可能影响性能,需评估后使用:sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'error log severity', 16; RECONFIGURE;
内容的提问来源于stack exchange,提问作者user210084
相关产品推荐
相关产品推荐

