为什么死锁警报不起作用?

Mag*_*ier 4 sql-server sql-server-2008-r2 event-notification alerts

我创建了一个死锁警报,包括向这样的操作员发出通知:

EXEC msdb.dbo.sp_add_alert @name=N'1205 Deadlock', 
        @message_id=1205, 
        @severity=0, 
        @enabled=1, 
        @delay_between_responses=30, 
        @include_event_description_in=1, 
        @database_name=N'myDB', 
        @category_name=N'[Uncategorized]', 
        @job_id=N'00000000-0000-0000-0000-000000000000';
Run Code Online (Sandbox Code Playgroud)

此警报已注册用于通知。

它的历史说它从未出现过,尽管它已经存在了几个月并且每天都有多个僵局。我手动创建了一个死锁。它显示在日志文件中。

此警报缺少什么以发出通知?其他通知,例如 18456 Invalid Login 工作正常。

spa*_*dba 7

可能是错误 1205 未设置为登录ERRORLOG。在sys.messages

SELECT *
FROM sys.messages 
WHERE message_id = 1205;
Run Code Online (Sandbox Code Playgroud)

如果该列is_event_logged设置为 0,请按以下方式更改:

EXEC master.sys.sp_altermessage 
    @message_id = 1205,
    @parameter = 'WITH_LOG',
    @parameter_value = 'true';
Run Code Online (Sandbox Code Playgroud)

文档sp_add_alert描述在此条件下发出警报:

评论

sp_add_alert必须从msdb数据库运行。

在这些情况下,SQL Server 和 SQL Server 应用程序生成的错误/消息会发送到 Windows 应用程序日志并因此引发警报:

  • 严重性 19 或更高的sys.messages错误
  • RAISERROR使用WITH LOG语法调用的任何语句
  • 使用sp_altermessage修改或创建的任何sys.messages错误
  • 使用xp_logevent记录的任何事件