我们有一个旧的SQL Server 2000机器,其中一堆作业运行过夜。偶尔,执行后,服务器维护,机器重新启动,一些SQL组件不拿出OS(即使它们被配置为这样做)。应该我们的夜间作业运行之前,我想(从远程机器)上运行一些检查,看看如果SQL Server,SQL Server代理和SQL Server OLAP服务正在运行。我发现,看起来他们应该工作的几件事情,但我想知道如果在这个社区的专家可以对每一种方法的质量和可靠性评。我可以将此应用代码,可以是通过Windows任务计划.vbs文件运行或创建一个C#Windows服务。

<强>候选1: 执行在program_name列针对master..sysprocesses一个查询,并寻找我希望找到各工序

<强>候选2: 执行查询针对master..xpcmd_shell像这样:

exec master..xp_cmdshell 'sc \\hostname query SQLServerAgent'

然后寻找 'STATE:4 RUNNING' 在结果

<强>候选3: 使用.NET Framework,搜索这样的过程: 检查进程是否在运行使用C#远程系统

这是一些真正只需要每天一次运行,并且如果任何进程应该运行不将发送电子邮件警报。

有帮助吗?

解决方案

对于那些有兴趣的解决方案,我结束了...请继续阅读。

我结束了与候选人1会因为容易开发时间和熟悉我有一个C#/ ADO.NET / SQL服务器。我创建了一个C#Windows服务调用Timer_Elapsed事件(相当标准的东西)内存储的过程。

下面是存储过程的服务是调用的胆:

SELECT
    RTRIM(LTRIM(hostname)) AS hostname,
    RTRIM(LTRIM(program_name)) AS program_name,
    RTRIM(LTRIM(nt_domain)) AS nt_domain,
    RTRIM(LTRIM(nt_username)) AS nt_username,
    RTRIM(LTRIM(loginame)) AS loginame
FROM
    master..sysprocesses
WHERE
    hostname = 'CSSMCDBSW03'
AND
    program_name IN ('Microsoft SQL Server Analysis Services', 'SQLAgent - Generic Refresher')
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top