通过 SQL Server 中的数据库邮件进行健康检查

Stu*_*ler 2 sql-server-2005 sql-server-2008

我有一些 SQL 脚本,希望每天在我的 SQL Server 上运行。如何多次查询并获得类似于以下内容的输出:

Health check for <server>

Query Title 1:

<query results 1>


Query Title 2:

<query results 2>
Run Code Online (Sandbox Code Playgroud)

我正在检查诸如上次良好备份、正常运行时间等内容,因此它们彼此不相关。我计划在 SQL Server 作业中使用 sp_send_db_mail。这是完成这项任务的最佳方式吗?

理想情况下,我只想要一封电子邮件。

更新

经过多年的战斗!!!到目前为止,我找到的解决方案是将其放入存储过程,然后像这样执行存储过程:

EXEC msdb.dbo.sp_send_dbmail
        @recipients = N'<email>',
        @body = @body, 
        @subject = @subjectt,
        @profile_name = @ProfileName,
        @query ='exec test..sp_checks'
Run Code Online (Sandbox Code Playgroud)

这可以用于多个选择语句吗?

Ric*_*ard 5

这更多地只是对哲学而不是技术的说明。

如果您这样做,我会确保对其设置一些限制,以便它仅在您超出这些限制时才发送电子邮件。

例如,如果您的 CPU 频繁飙升至 100%,我会发送电子邮件。但是,如果 CPU 没有问题,我会明确地故意发送电子邮件。

如果您每天从数据库中收到一封电子邮件,您将在一段时间后开始忽略它们。但是,如果您只在您认为应该检查某些内容时才收到它们,则您更有可能查看电子邮件。

此外,我会将这些限制设置为可配置(甚至可能设置标志以便可以打开或关闭特定查询)。


关于您在一封电子邮件中进行多项选择的问题,听起来有两个选项:

  1. 获取每个查询的结果并将它们格式化为包含您想要的所有内容的字符串。

  2. 将所有不同的结果合并到一个查询中,然后将您的 @query 设置为该查询。(或者,将所有结果粘贴到临时表中并查询临时表。)

我应该注意,可以在@query 中粘贴一个查询以及在@body 中粘贴第二个查询的结果(per herehere),但这仅允许您执行两个语句。

我会在存储过程中尝试选项一。诀窍是将表格格式化为字符串。但是,它最有可能正常工作。