Как экспортировать вывод sp_AskBrent?

11

У нас есть экземпляр, который случайным образом нагружает процессор. Я хочу создать предупреждение, которое запускает процессор более чем на 90% и автоматически вызывает задание, которое запускается, sp_AskBrentи отправляет мне по электронной почте вывод. Однако выходные данные не читаются ни в текстовом, ни в HTML-формате. Это даже не вписывается в электронную таблицу Excel. Как я могу получить информацию в удобочитаемом формате?

Мик
источник
3
Вы можете проверить мой ответ на другой вопрос, чтобы запустить его под PowerShell, он выведет HTML-отчет с данными. В зависимости от версии SQL Server вы можете настроить его как задание агента SQL (шаг PowerShell), а затем добавить код PS для отправки файла по электронной почте.
@ShawnMelton, да, я пришел сюда, чтобы опубликовать, что запуск PowerShell - это довольно тривиально, чтобы затем выполнить специальное форматирование.
Константин К

Ответы:

13

Заставьте оповещение запустить задание EXEC msdb.dbo.sp_send_dbmailс @queryпараметром:

EXEC dbo.sp_send_dbmail @profile_name = 'mail_profile'
    , @recipients = 'some@mail.com'
    , @subject = 'some subject'
    , @body = 'the body text goes here'
    , @query = 'EXEC sp_AskBrent;'
    , @attach_query_result_as_file = 1;

@attach_query_result_as_file = 1Параметр будет посылать результаты в виде вложения в текстовом формате, который , безусловно , должен быть читаемым. При желании вы можете экспортировать результаты в формате с разделителями-запятыми, используя @query_result_separatorпараметр.

Со страницы MSDN дляsp_send_dbmail :

В этом примере отправляется электронное сообщение Дэну Уилсону с использованием адреса электронной почты danw@Adventure-Works.com. Сообщение имеет тему Количество рабочих заданий и выполняет запрос, который показывает количество рабочих заданий с сроком исполнения менее двух дней после 30 апреля 2004 г. База данных Mail прикрепляет результат в виде текстового файла.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Adventure Works Administrator',
    @recipients = 'danw@Adventure-Works.com',
    @query = 'SELECT COUNT(*) FROM AdventureWorks2012.Production.WorkOrder
                  WHERE DueDate > ''2004-04-30''
                  AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2' ,
    @subject = 'Work Order Count',
    @attach_query_result_as_file = 1 ;

Есть много вариантов для этого хранимого процесса; проверьте страницу MSDN и, скорее всего, вы получите вывод именно так, как вы этого хотите.

Макс Вернон
источник