2

我们有一台旧的 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#

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

4

1 回答 1

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')
于 2010-03-31T17:56:48.963 回答