我检测到SQLAgent没有在我们的服务器上运行,原因是一个意外的内存泄漏错误导致SQLAgent关闭。没有配置警报,因此应该运行的一个主要作业没有配置。是否有方法从Server本身监视SQL代理?
我做了很多搜索,但找不到方法。我发现了很多关于监视作业、计划等的内容,但没有发现如何监视SQL代理是否停止工作、不会重新启动或任何类似的阻止其运行的方法。
PS:我打算问另一个关于内存泄漏问题的问题
发布于 2014-09-04 15:13:30
您可以做的是将下面的脚本存储在服务器上,或者将其作为存储过程:
在sqlcmd下面使用
IF EXISTS ( SELECT 1
FROM MASTER.dbo.sysprocesses
WHERE program_name = N'SQLAgent - Generic Refresher')
BEGIN
SELECT @@SERVERNAME AS 'InstanceName', 1 AS 'SQLServerAgentRunning'
END
ELSE
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'databaseMail test profile', --<-- Change HERE !!
@recipients = 'databaseteam@somecompany.com', --<-- Change HERE !!
@body = 'Please check the status of SQL Agent. It is not running !',
@query = 'SELECT @@SERVERNAME AS [InstanceName], 0 AS [SQLServerAgentRunning]',
@subject = 'SQL Agent is not running',
@attach_query_result_as_file = 0 ; -- set it to 1 to receive as txt file attachment
END
你能做些什么来缓解它:

发布于 2014-09-04 15:06:09
除了在另一台服务器上设置单独的进程之外,您唯一的选择是配置特定服务的恢复操作。这是在Windows端完成的,而不是在Server上完成的。有些人会让它运行一个程序/批处理文件来拍摄电子邮件或其他类似的东西。这取决于你。
总之,如果我没有适当的监控来处理这个问题,我会说,只需构建一个小的PowerShell脚本,如果在服务器上发现服务时,它只发送电子邮件,然后在服务器上运行它并使用预定的任务运行它。添加上述恢复选项只在服务意外停止时,如果某个程序或脚本在您不知情的情况下优雅地关闭它,则不会覆盖。
发布于 2014-09-04 15:09:33
困难的方法是构建一个监视SQL活动的扩展事件(它定期运行存储过程以检查需要运行的作业),并通知如果没有发生这种情况。问题是,您需要某种预定的执行工具来运行它,这正是您使用SQLAgent所做的。如果您打算使用windows调度器作为预定的执行工具,那么最好只编写一些powershell来查看服务是否正在运行。
更好的方法可能是绑定到服务监视系统(PRTG、system等),并使用它来监视您的服务。使用服务来监控自己是一个鸡与蛋的问题。
https://dba.stackexchange.com/questions/75721
复制相似问题