You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server警报未触发求助:仅带WITH LOG的语句才触发邮件

问题解答

核心原因

SQL Server Agent基于错误严重性级别创建的警报,仅会触发那些被**写入SQL Server错误日志(及Windows事件日志)**的错误,会话级的非日志错误不会被捕获。

具体分析

  1. RAISERROR带/不带WITH LOG的差异

    • 不带WITH LOG的RAISERROR('Test Alert Error', 16,1):仅在当前会话抛出错误,不会写入SQL Server错误日志,因此Agent警报无法检测到这个事件。
    • 带WITH LOG的RAISERROR:会将错误信息写入SQL Server错误日志和Windows应用程序日志,Agent的警报机制会监控这些日志,因此能触发警报。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:03:20