我们有两台 MS SQL 服务器(一台 2000 和一台 2005),它们在白天和晚上的不同时间运行许多作业。这些作业有许多步骤,它们将从 Informix 数据库(我们的业务系统)中提取数据并更新表以供各种报告和生产系统使用。
我们在周末遇到了这些导入失败,导致许多报告系统提供了错误的数据。
由于安全限制,我们无法启用从服务器发送电子邮件,那么我们如何才能有效地监控这些作业,而不必不断检查企业管理器或 MS SQL Studio 中的作业状态?是否可以在服务器上运行查询并查找各种作业的状态?
有几种不同的方法可以监控 sql server 作业的输出。
选项 1:监控工具,例如 Sitesope、MOM/SCOM 或自定义 对于大多数生产实例,您希望有一个企业监控工具来扫描操作系统和 SQL 相关的错误。通常,您将 Sql Agent 作业设置为在它们失败时写入 Windows 事件日志,并且您的监视工具会经常读取 Windows 事件日志并根据您定义的条件向您发出警报。您可以购买 SiteScope 等监控系统,或创建自己的工具来查找这些错误。您还可以使用 Logparser 之类的工具来读取这些日志。
我首先提到这个选项是因为如果您的报告系统很关键,您可能希望长期投资于可靠的监控系统。如果您想走 Windows 日志路线,短期内您可以编写一些自定义脚本。
方案二:查询MSDB 所有的sql作业历史都存储在MSDB数据库中,确实可以查询。您可以从查询窗口或自定义工具执行此操作 - 例如,您可以创建一个 powershell 脚本,该脚本定期连接到您的每台服务器,并相应地查询 msdb 数据库以获取给定的条件和警报。
我写了几个博客条目,其中包含用于查询 sql 作业历史的示例脚本。它们都不能完全满足您的要求,但它们将帮助您使用日期存储在 MSDB 中的方式,这可能有点棘手,因为它们没有存储在日期时间字段中:http://thedbaknows.wordpress .com/category/sql-agent/
希望这可以帮助!
每次我提到这个我都会被骂,但我还是会提到它,因为它对我有用。
几乎所有您作为 SQL 作业执行的操作,您都可以使用 osql 从批处理文件执行相应的 SQL 命令。批处理文件的优点是您可以灵活地分析结果并在出现任何错误时发送通知。特别是如果您使用 Powershell。只需从 Windows 调度程序运行批处理文件。
通常的批评是,这是一种非标准的做事方式,我猜是。但是,我有一百多台服务器分散在英国西北部,并使用批处理文件(和一些 VBScript)来运行数据库备份和维护任务并分析结果是我发现使事情变得易于管理的最佳方法。
JR
如果您的监控应用程序可以运行 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 Server 发送电子邮件背后的逻辑是什么?