2010-03-29 96 views
2

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

候选人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

对于那些对解决方案感兴趣的人,我结束了......阅读。

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

这个想法是,如果我不能连接到SQL数据库可言,它假定SQL Server未运行,因此SQLAgent也没有运行。所以我发出电子邮件警报。如果我可以连接到SQL数据库,则运行此存储过程并检查SQLAgent和MSSAS记录是否都返回。如果没有,我会发送一封电子邮件提醒您有哪些遗漏。 – jamauss 2010-03-31 17:59:09

相关问题