查看SQL Server 2000进程是否正在运行的最佳方法?

时间:2010-03-29 17:55:27

标签: sql-server remote-process

我们有一台旧的SQL Server 2000计算机,其中一堆作业在一夜之间运行。有时,在执行服务器维护并重新启动计算机后,某些SQL组件不会提供操作系统(即使它们已配置为执行此操作)。因此,在我们的夜间作业运行之前,我想(从远程计算机)运行一些检查,以查看SQL Server,SQL Server代理和SQL Server OLAP服务是否正在运行。我发现了一些似乎应该有用的东西,但我想知道这个社区的专家是否可以对质量和评价做出评论。每种方法的可靠性。我可以将此应用程序编码为通过Windows计划任务运行的.vbs文件或创建C#Windows服务。

候选人1: 对master..sysprocesses执行查询,并在program_name列中查找我希望找到的相应进程。

候选人2: 对master..xpcmd_shell执行查询,如下所示:

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

然后在结果中查找“STATE:4 RUNNING”

候选人3: 使用.NET Framework,搜索如下过程: Check if a process is running on a remote system using C#

这实际上只需要每天运行一次,并且如果任何应该运行的进程没有发送,则会发送电子邮件警报。

1 个答案:

答案 0 :(得分:1)

对于那些对解决方案感兴趣的人,我最终得到了...继续阅读。

我最终选择了候选人1,因为我对C#/ ADO.NET / SQL Server的开发时间和熟悉程度都很高。我创建了一个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')