我们有两个MS SQL服务器(一个2000和一个2005),在白天和黑夜的不同时间运行一些工作。 这些作业有许多步骤,将从Informix数据库(我们的业务系统)中提取数据,并更新表以供各种报告和生产系统使用。
我们周末的这些import产品出现了故障,导致许多报告系统提供了错误的数据。
由于安全限制,我们无法从服务器发送电子邮件,因此我们如何能够有效地监控这些作业,而无需经常检查企业pipe理器或MS SQL Studio中的作业状态? 是否可以在服务器上运行查询并查找各种作业的状态?
有几种不同的方法来监视sql server作业的输出。
选项1:监视工具,如Sitesope,MOM / SCOM或自定义对于大多数生产实例,您希望有一个企业监视工具来扫描操作系统和SQL相关的错误。 通常,您将Sql Agent作业设置为在Windows事件日志失败时写入,并且您的监视工具会经常读取Windows事件日志,并会根据您定义的条件提醒您。 您可以购买SiteScope等监控系统,或者创build自己的工具来查找这些错误。 您也可以使用像Logparser这样的工具来读取这些日志。
我首先提到这个select,因为如果您的报告系统非常关键,您可能需要长期投资于可靠的监控系统。 短期来说,如果你想去Windows日志路线,你可以做一些自定义的脚本。
选项2:查询MSDB所有sql作业历史logging存储在MSDB数据库中,您确实可以查询它。 您可以通过查询窗口或自定义工具执行此操作 – 例如,您可以创build一个PowerShell脚本,该脚本定期连接到您的每个服务器,并相应地查询msdb数据库以查找给定的条件和警报。
我已经写了几个博客条目,其中包含查询SQL作业历史logging的示例脚本。 他们都没有完全按照你的要求去做,但是他们会帮助你处理date存储在MSDB中的方式,这可能有点棘手,因为它们不存储在date时间字段中: http://thedbaknows.wordpress的.com /类别/ SQL代理/
希望这可以帮助!
每次我提到这个,我都会大声嚷嚷,但无论如何我会提到它,因为它对我有用。
事实上,您可以使用osql从batch file中执行SQL作业来运行适当的SQL命令。 batch file的优势在于,如果分析结果和发送通知(如果有任何错误),您将拥有极大的灵活性。 特别是如果你使用Powershell。 只需从Windows调度程序运行batch file。
通常的批评是,这是一个非标准的方式来做事情,我想是的。 然而,我有超过一百个分散在英国西北部的服务器,并使用batch file(和一些VBScript)来运行数据库备份和维护任务,并分析结果是我发现使事情可pipe理的最佳方式。
JR
如果您的监控应用程序可以运行SQL状态:
您可以运行sp_help_job并将结果放入表中,然后查找last_run_outcome为0的作业。如果有监视应用程序发送电子邮件。
或者更好的是,告诉pipe理人员,SQL Server不能发送邮件的限制会对主动监视SQL Server产生不利影响,因为SQL Server不能用于最全面的function,通过提醒DBA哪里有工作失败。
我假设你使用某种企业级邮件系统(Exchange,Lotus等)。 设置SQL Server通过SMTP向邮件系统发送邮件,并设置邮件系统,以便SQL Server只能通过电子邮件发送给DBA。 这样,不应该担心SQL Server神奇地发送电子邮件给不应该得到它们的人。
什么是不让SQL服务器发送电子邮件背后的逻辑?