2

古い SQL Server 2000 マシンがあり、一晩中一連のジョブが実行されています。サーバーのメンテナンスが実行され、マシンが再起動された後、一部の SQL コンポーネントが (そのように構成されていても) OS を起動しないことがあります。したがって、夜間のジョブを実行する前に、(リモート マシンから) 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 を使用して、次のようにプロセスを検索します。 C# を使用してリモート システムでプロセスが実行されているかどうかを確認します。

これは実際には 1 日に 1 回だけ実行する必要があるものであり、実行されるべきプロセスのいずれかが実行されていない場合に電子メール アラートを送信します。

4

1 に答える 1

1

解決策に興味のある人のために、私は結局...読み続けました。

開発時間が簡単で、C#/ ADO.NET / SQL Serverに精通しているため、最終的に候補1を選択しました。Timer_Elapsedイベント内でストアドプロシージャを呼び出すためのC#Windowsサービスを作成しました(かなり標準的なもの)。

サービスが呼び出しているストアドプロシージャの内臓は次のとおりです。

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 に答える