2008-08-22 5 views
6

Je cherche un moyen d'interroger différents serveurs et de vérifier que le serveur SQL est opérationnel. J'écris mon code en C#. Je ne me soucie pas particulièrement des bases de données individuelles, juste que SQL Server est en cours d'exécution et réactif.Détection de l'exécution du serveur SQL

Des idées?

Répondre

5

Eh bien, la solution brute force consiste à tenter d'établir une connexion avec la base de données sur chaque serveur. Cela vous dira si c'est en cours, mais vous pourriez avoir des problèmes de timeout. Le plus élégant (mais plus difficile ... n'est pas toujours le chemin?) Solution serait d'utiliser WMI pour se connecter à la machine distante et savoir si le processus du serveur SQL est en cours d'exécution.

+0

ummm..juste un poke à la solution brute force, disons vous avait une liste de connexions, dans Framework 4, vous pouviez penser à foreach.parallel et attendre le résultat async. Toujours voir des problèmes de perf Danny? J'essaie juste de voir où les choses parallèles ont du sens ... – Perpetualcoder

+0

liste de chaîne de connexion pour être précis – Perpetualcoder

+0

?? Peut-être que j'ai raté quelque chose, mais je ne vois pas ce que vous essayez de faire. – TheSmurf

2

Utilisez le TCPClient Class pour créer une fonction générique qui se connecte en TCP à une adresse IP donnée.

Puis itérer sur la liste des serveurs que vous souhaitez tester et essayer d'ouvrir une connexion au port 1433.

0

Je certainement aller avec la réponse de Vincent. Assurez-vous juste que vous fermez et disposez correctement les connexions tcp, etc. WMI semble un peu exagéré pour moi si c'est tout ce que vous cherchez.

2

System.Data.Sql.SqlDataSourceEnumerator retournera toutes les instances de SQL Server en cours d'exécution. SqlDataSourceEnumerator vous donne toutes les instances, mais elles ne sont pas nécessairement en cours d'exécution.
MSDN Link

+0

Je reçois les mêmes résultats que lorsque j'utilise le code SQLDMO 3 sur 6 reconnu. –

2

Pour les instances locales de SQL, vous pouvez utiliser l'objet ServiceController, espace de noms System.ServiceProcess. Le nom de service est la concaténation de "MSSQL $" et "InstanceName" de SqlDataSourceEnumerator. Définir la propriété ServiceName de l'objet ServiceController, et vous pouvez vérifier la propriété "Status" - Arrêté, en cours d'exécution, en instance etc. Par conséquent, vous pouvez filtrer "Running" ceux

Questions connexes