【问题标题】:Best method for seeing if SQL Server 2000 processes are running?查看 SQL Server 2000 进程是否正在运行的最佳方法?
【发布时间】:2010-03-29 17:55:26
【问题描述】:

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

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

【问题讨论】:

    标签: sql-server remote-process


    【解决方案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')
    

    【讨论】:

    • 这个想法是,如果我根本无法连接到 SQL 数据库,则假定 SQL Server 没有运行,因此 SQLAgent 也没有运行。所以我发送了一封电子邮件警报。如果我可以连接到 SQL 数据库,我会运行这个存储过程并检查 SQLAgent 和 MSSAS 记录是否都回来了。如果没有,我会发送一封电子邮件提醒丢失的任何内容。
    猜你喜欢
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多