¿Cómo exportar la salida de sp_AskBrent?

11

Tenemos una instancia que dispara aleatoriamente la CPU. Quiero crear una alerta que se active en la CPU por encima del 90% y que automáticamente llame a un trabajo que se ejecuta sp_AskBrenty me envíe por correo electrónico la salida. Sin embargo, la salida es ilegible en texto o HTML. Ni siquiera va bien en una hoja de cálculo de Excel. ¿Cómo puedo obtener la información en un formato legible?

Mick
fuente
3
Puede verificar mi respuesta en otra pregunta para ejecutarla en PowerShell, generará un informe HTML de los datos. Dependiendo de la versión de SQL Server, puede configurarlo como un trabajo del Agente SQL (paso de PowerShell) y luego agregar el código PS para enviar el archivo por correo electrónico.
@ShawnMelton sí, vine aquí para publicar eso también, la ejecución de PowerShell es bastante trivial para luego formatear ad hoc.
ConstantineK

Respuestas:

13

Haga que la alerta ejecute un trabajo que se ejecuta EXEC msdb.dbo.sp_send_dbmailcon el @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;

El @attach_query_result_as_file = 1parámetro enviará los resultados como un archivo adjunto en formato de texto, que ciertamente debería ser legible. Si lo desea, puede exportar los resultados en formato delimitado por comas utilizando el @query_result_separatorparámetro

Desde la página de MSDN parasp_send_dbmail :

Este ejemplo envía un mensaje de correo electrónico a Dan Wilson utilizando la dirección de correo electrónico [email protected]. El mensaje tiene el asunto Recuento de órdenes de trabajo y ejecuta una consulta que muestra el número de órdenes de trabajo con una fecha de vencimiento inferior a dos días después del 30 de abril de 2004. El Correo electrónico de base de datos adjunta el resultado como un archivo 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 ;

Hay muchas opciones para ese proceso almacenado; revise la página de MSDN y probablemente obtendrá el resultado exactamente como lo desea.

Max Vernon
fuente