Microsoft SQL Server Management Studio - оповещения с дополнительной информацией о блокировке

Мы хотим получить предупреждение, когда блокировка ожидает более 60 секунд. Предупреждение script ниже выполняет как ожидалось.

Но мы хотели бы получить дополнительную информацию, такую ​​как заблокированный идентификатор сеанса, статус блокировки, имя пользователя и т.д.

Есть ли способ включить это в @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

Ответы

Ответ 1

Системная хранимая процедура 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. Затем вы можете настроить свое сообщение, которое вы хотите.