SQL Server 2000 プロセスが実行されているかどうかを確認するための最良の方法は何ですか?
-
23-09-2019 - |
質問
古い 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 回実行するだけで済み、実行されるべきプロセスが実行されていない場合に電子メール アラートを送信します。
解決
私はので、私は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')