如何监控 SQL 服务器上失败的作业步骤?

如何监控 SQL 服务器上失败的作业步骤?

我们有两台 MS SQL 服务器(一台 2000,一台 2005),它们在白天和晚上的不同时间运行大量作业。这些作业有许多步骤,它们将从 Informix 数据库(我们的业务系统)中提取数据并更新表格,以供各种报告和生产系统使用。

上周末我们的导入出现了故障,导致许多报告系统给出了错误的数据。

由于安全限制,我们无法启用从服务器发送电子邮件的功能,那么我们如何才能有效地监控这些作业,而不必不断检查企业管理器或 MS SQL Studio 中的作业状态?是否可以在服务器上运行查询并查找各种作业的状态?

答案1

有几种不同的方法来监视 SQL 服务器作业的输出。

选项 1:监控工具,例如 Sitesope、MOM/SCOM 或自定义 对于大多数生产实例,您需要一个企业监控工具来扫描操作系统和 SQL 相关错误。通常,您会将 SQL Agent 作业设置为在失败时写入 Windows 事件日志,并且您的监控工具会频繁读取 Windows 事件日志并根据您定义的条件向您发出警报。您可以购买 SiteScope 等监控系统,或创建自己的工具来查找这些错误。您还可以使用 Logparser 等工具来读取这些日志。

我首先提到此选项是因为如果您的报告系统至关重要,您可能希望长期投资于可靠的监控系统。如果您想使用 Windows 日志路线,短期内您可以编写一些自定义脚本。

选项 2:查询 MSDB 所有 SQL 作业历史记录都存储在 MSDB 数据库中,您确实可以查询它。您可以从查询窗口或自定义工具执行此操作 - 例如,您可以创建一个 powershell 脚本,定期连接到您的每台服务器并查询 msdb 数据库以获取给定的条件并相应地发出警报。

我写过几篇博客文章,其中有查询 SQL 作业历史记录的示例脚本。但它们都没有确切地您所要求的,但它们将帮助您处理日期在 MSDB 中的存储方式,这可能有点棘手,因为它们没有存储在日期时间字段中:http://thedbaknows.wordpress.com/category/sql-agent/

希望这可以帮助!

答案2

每次我提到这一点,都会被大声呵斥,但我还是会提到它,因为它对我有用。

几乎任何 SQL 作业都可以使用 osql 从批处理文件中运行相应的 SQL 命令来完成。批处理文件的优点是,您可以非常灵活地分析结果并在出现任何错误时发送通知。如果您使用 Powershell,尤其如此。只需从 Windows 调度程序运行批处理文件即可。

通常人们批评说这是不标准的做事方式,我想确实如此。但是我有一百多台服务器分散在英国西北部,使用批处理文件(和一些 VBScript)来运行数据库备份和维护任务并分析结果是我发现的让事情变得易于管理的最佳方式。

JR

答案3

如果您的监控应用程序可以运行 SQL 语句:

您可以运行 sp_help_job 并将结果放入表中,然后查找 last_run_outcome 为 0 的作业。如果有,请让监控应用程序发送电子邮件。

或者更好的是,通知您的管理层,SQL Server 无法发送邮件的限制会对您主动监控 SQL Server 产生不利影响,因为 SQL Server 无法通过在作业失败时向 DBA 发出警报来充分发挥其功能。

我假设您使用某种企业级邮件系统(Exchange、Lotus 等)。设置 SQL Server 通过 SMTP 向邮件系统发送邮件,并设置邮件系统以便 SQL Server 只能向 DBA 发送电子邮件。这样就不必担心 SQL Server 会神奇地向不应该收到电子邮件的人发送电子邮件。

不让 SQL 服务器发送电子邮件的逻辑是什么?

相关内容