2010-03-29 2 views
2

Nous avons une ancienne machine SQL Server 2000 où un tas de tâches s'exécutent pendant la nuit. Parfois, après la maintenance du serveur et le redémarrage de l'ordinateur, certains composants SQL ne sont pas fournis avec le système d'exploitation (même s'ils sont configurés pour le faire). Donc, avant que nos tâches nocturnes soient supposées s'exécuter, j'aimerais (à partir d'une machine distante) exécuter des vérifications pour voir si SQL Server, l'Agent SQL Server et le Service OLAP SQL Server sont en cours d'exécution. J'ai trouvé quelques choses qui semblent fonctionner, mais je me demande si les experts de cette communauté peuvent commenter la qualité de chaque approche. Je peux coder cette application comme un fichier .vbs exécuté via des tâches planifiées Windows ou créer un service Windows C#.Meilleure méthode pour voir si les processus SQL Server 2000 sont en cours d'exécution?

Candidate 1: exécutons une requête sur master..sysprocesses et regardez dans la colonne program_name pour les processus respectifs que je compte trouver.

Candidate 2: Exécuter une requête sur master..xpcmd_shell comme ceci:

exec master..xp_cmdshell 'sc \\hostname query SQLServerAgent' 

recherche alors 'ÉTAT: 4 RUNNING' dans les résultats

Candidat 3: À l'aide du .NET Framework, recherchez le processus comme suit: Check if a process is running on a remote system using C#

Ceci est quelque chose qui n'a vraiment besoin d'être exécuté qu'une fois par jour et enverra une alerte par courrier électronique si l'un des processus qui devrait être en cours d'exécution ne l'est pas.

Répondre

1

Pour ceux qui s'intéressent à la solution, j'ai fini par ... lire la suite.

Je me suis retrouvé avec le candidat 1 en raison de la facilité de développement et de la familiarité que j'ai avec C#/ADO.NET/SQL Server. J'ai créé un service Windows C# pour appeler un proc stocké dans un événement Timer_Elapsed (assez standard).

Voici les entrailles de la procédure stockée service est Vocation:

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

Et l'idée est, si je ne peux pas se connecter à la base de données SQL du tout, il est supposé SQL Server ne fonctionne pas, et par conséquent SQLAgent ne fonctionne pas non plus. Alors j'envoie une alerte par email. Si je peux me connecter à la base de données SQL, je lance ce proc stocké et vérifie que les enregistrements SQLAgent et MSSAS reviennent. Sinon, j'envoie une alerte par courriel pour tout ce qui manque. – jamauss

Questions connexes