Published on

February 9, 2022

Использование EmailResponse в расширенных событиях SQL Server

Добро пожаловать на наш последний блог о расширенных событиях SQL Server! В этом посте мы расскажем о том, как использовать функцию EmailResponse в расширенных событиях для отправки уведомлений по электронной почте при возникновении определенных событий.

Проблема

Расширенные события – это мощный инструмент в SQL Server для захвата и анализа событий. Однако, в нем отсутствует встроенный механизм оповещения. В этом случае пригодится XESmartTarget. С помощью XESmartTarget вы можете использовать EmailResponse для отправки электронных уведомлений, когда захватывается интересное событие.

Решение

Чтобы продемонстрировать, как использовать EmailResponse, рассмотрим пример захвата событий блокировки. Блокировки – это критические проблемы в системе базы данных, и важно получать уведомления о их возникновении.

Сначала нам нужно создать сеанс расширенных событий, который будет захватывать события блокировки. Вот скрипт для создания сеанса:

IF NOT EXISTS (SELECT * FROM sys.server_event_sessions WHERE name = 'Recipe04')
CREATE EVENT SESSION [Recipe04] ON SERVER 
ADD EVENT sqlserver.xml_deadlock_report(
    ACTION(
        sqlserver.client_app_name,
        sqlserver.client_hostname,
        sqlserver.database_name,
        sqlserver.server_instance_name,
        sqlserver.server_principal_name,
        sqlserver.session_id
    )
)
GO

IF NOT EXISTS (SELECT * FROM sys.dm_xe_sessions WHERE name = 'Recipe04')
    ALTER EVENT SESSION Recipe04 ON SERVER STATE = START;

После создания сеанса мы можем настроить EmailResponse для отправки уведомлений по электронной почте при захвате события блокировки. Вот пример конфигурации:

{
    "Target": {
        "ServerName": "$ServerName",
        "SessionName": "Recipe04",
        "FailOnProcessingError": false,
        "Responses": [
            {
                "__type": "EmailResponse",
                "SMTPServer": "localhost",
                "Sender": "demo@localhost",
                "To": "dba@localhost",
                "Subject": "Произошла блокировка",
                "Body": "О нет! У нас возникла блокировка!",
                "Attachment": "xml_report",
                "AttachmentFileName": "deadlock.xdl",
                "HTMLFormat": true,
                "Events": [
                    "xml_deadlock_report"
                ]
            }
        ]
    }
}

В этой конфигурации мы указываем SMTP-сервер, отправителя, получателя, тему, текст и детали вложения для уведомления по электронной почте. Свойство “Attachment” указывает, какое поле или действие из события содержит данные для вложения, а свойство “AttachmentFileName” указывает имя прикрепленного файла.

После настройки конфигурации мы можем запустить XESmartTarget с файлом конфигурации, чтобы начать захватывать и отправлять уведомления по электронной почте о событиях блокировки:

"%ProgramFiles%XESmartTargetxesmarttarget.exe" --File c:tempRecipe_04_Alert_Email.json --GlobalVariables ServerName=(local)SQLEXPRESS

С такой настройкой XESmartTarget будет отправлять уведомление по электронной почте при захвате события блокировки, включая график блокировки в качестве вложения. Затем вы можете открыть вложение в SSMS для анализа блокировки.

Заключение

Функция EmailResponse в расширенных событиях SQL Server позволяет настроить систему оповещения на основе определенных событий. Настроив EmailResponse, вы можете получать уведомления по электронной почте, когда происходят важные события, такие как блокировки, блокировки или ошибки высокой степени серьезности.

Следите за нашим следующим блогом, где мы узнаем, как выполнять команды T-SQL в ответ на определенные события с использованием расширенных событий. Не забудьте следить за тегом XESmartTarget для получения больше рецептов!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.