Como exportar a saída de sp_AskBrent?

11

Temos uma instância que atinge aleatoriamente a CPU. Quero criar um alerta que dispara na CPU mais de 90% e chama automaticamente um trabalho que é executado sp_AskBrente envia a mensagem por e-mail. No entanto, a saída é ilegível na saída de texto ou HTML. Ele nem vai bem em uma planilha do Excel. Como posso obter as informações em um formato legível?

Mick
fonte
3
Você pode verificar minha resposta em outra pergunta para executá-lo no PowerShell, ele exibirá um relatório HTML dos dados. Dependendo da versão do SQL Server, você pode configurá-lo como um trabalho do SQL Agent (etapa do PowerShell) e adicionar o código PS para enviar o arquivo por email.
@ ShawnMelton sim, eu vim aqui para postar isso também, o PowerShell em execução é bastante trivial para a formatação adhoc.
ConstantineK

Respostas:

13

Faça o alerta executar um trabalho que execute o EXEC msdb.dbo.sp_send_dbmailcom o @queryparâmetro:

EXEC dbo.sp_send_dbmail @profile_name = 'mail_profile'
    , @recipients = '[email protected]'
    , @subject = 'some subject'
    , @body = 'the body text goes here'
    , @query = 'EXEC sp_AskBrent;'
    , @attach_query_result_as_file = 1;

O @attach_query_result_as_file = 1parâmetro enviará os resultados como um anexo em formato de texto, o que certamente deve ser legível. Se desejar, você pode exportar os resultados em formato delimitado por vírgula usando o @query_result_separatorparâmetro

Na página MSDN parasp_send_dbmail :

Este exemplo envia uma mensagem de email para Dan Wilson usando o endereço de email [email protected]. A mensagem tem o assunto Contagem de Ordens de Serviço e executa uma consulta que mostra o número de ordens de serviço com um DueDate menos de dois dias após 30 de abril de 2004. O Database Mail anexa o resultado como um arquivo de texto.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Adventure Works Administrator',
    @recipients = '[email protected]',
    @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 ;

Existem muitas opções para esse proc armazenado; verifique a página do MSDN e provavelmente você obterá a saída exatamente como deseja.

Max Vernon
fonte