Microsoft SQL Server Management Studio - 提供有关锁定附加信息的警报

Rog*_*ier 15 sql-server sql-server-2008-r2 locks

我们希望在锁定等待时间超过60秒时发出警报.下面的警报脚本正在按预期执行.

但是我们希望获得更多信息,例如锁定的会话ID,锁定状态,登录名等.

有没有办法在@notification_message中包含这个?

USE [msdb]
GO
EXEC msdb.dbo.sp_update_alert @name=N'Total Lock Wait Time (ms) > 60000', 
        @message_id=0, 
        @severity=0, 
        @enabled=1, 
        @delay_between_responses=0, 
        @include_event_description_in=1, 
        @database_name=N'', 
        @notification_message=N'', 
        @event_description_keyword=N'', 
        @performance_condition=N'MSSQL$DB:Locks|Lock Wait Time (ms)|_Total|>|60000', 
        @wmi_namespace=N'', 
        @wmi_query=N'', 
        @job_id=N'00000000-0000-0000-0000-000000000000'
GO

EXEC msdb.dbo.sp_update_notification 
          @alert_name = N'Total Lock Wait Time (ms) > 60000', 
          @operator_name = N'me', 
          @notification_method = 1
GO
Run Code Online (Sandbox Code Playgroud)

Dea*_*one 2

系统msdb.dbo.sp_update_alert存储过程更新msdb.dbo.sysalerts表中的记录。参数nvarchar(512)“@notification_message”存储在该msdb.dbo.sysalerts.notification_message列中。当触发警报时,将提取该列的内容以获取消息。我以前没有尝试过这一点,但您可以尝试的一件事是创建一个 SQL 代理作业来修改其中的值msdb.dbo.sysalerts.notification_message,并使用 或@job_id参数将该作业附加到通知@job_name。如果幸运的话,该作业将在发送通知之前执行,从而“动态”更改通知的文本。我期望更有可能的是该作业将同时运行,并且只会影响下次触发此警报时。但根据您想要看到的内容,这可能已经足够了。

有关更多信息,请进入您的 MSDB 数据库并运行sp_helptext sp_update_alert,您可以看到它在做什么。

另一种选择是让 SQL 代理作业使用 发送消息sp_send_dbmail。然后您可以根据需要自定义消息。