Comment exporter la sortie de sp_AskBrent?

11

Nous avons une instance qui augmente aléatoirement le CPU. Je veux créer une alerte qui se déclenche sur le processeur à plus de 90% et appelle automatiquement un travail qui s'exécute sp_AskBrentet m'envoie la sortie par e-mail. Cependant, la sortie est illisible dans la sortie texte ou HTML. Il ne va même pas bien dans une feuille de calcul Excel. Comment puis-je obtenir les informations dans un format lisible?

Mick
la source
3
Vous pouvez vérifier ma réponse sur une autre question pour l'exécuter sous PowerShell, il produira un rapport HTML des données. Selon la version de SQL Server, vous pouvez le configurer en tant que travail d'agent SQL (étape PowerShell), puis ajouter du code PS pour envoyer le fichier par courrier électronique.
@ShawnMelton ouais, je suis venu ici pour poster cela aussi, le PowerShell le faisant fonctionner est assez trivial pour ensuite faire un formatage ad hoc.
ConstantineK

Réponses:

13

Faites exécuter l'alerte un travail qui exécute le EXEC msdb.dbo.sp_send_dbmailavec le @queryparamètre:

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;

Le @attach_query_result_as_file = 1paramètre enverra les résultats sous forme de pièce jointe au format texte, qui devrait certainement être lisible. Si vous le souhaitez, vous pouvez exporter les résultats au format délimité par des virgules à l'aide du @query_result_separatorparamètre.

À partir de la page MSDN poursp_send_dbmail :

Cet exemple envoie un message électronique à Dan Wilson à l'aide de l'adresse électronique [email protected]. Le message a pour objet Nombre de bons de travail et exécute une requête qui affiche le nombre de bons de travail avec une date d'échéance inférieure à deux jours après le 30 avril 2004. La messagerie de base de données joint le résultat sous forme de fichier texte.

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 ;

Il existe de nombreuses options pour ce proc stocké; vérifiez la page MSDN et vous obtiendrez probablement la sortie exactement comme vous le souhaitez.

Max Vernon
la source