2010-03-29 97 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

相關問題