Détecter si le server SQL est en cours d'exécution

Je suis à la search d'un moyen d'interroger différents servers et de vérifier que SQL Server 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.

Des idées?

Eh bien, la solution force brute est de tenter d'initier une connection avec la database sur chaque server. 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 cas?) Solution serait d'utiliser WMI pour se connecter à la machine distante et savoir si le process du server SQL est en cours d'exécution.

Utilisez la class TCPClient pour créer une fonction générique qui se connecte dans TCP à une adresse IP donnée.

Passez ensuite la list des servers que vous souhaitez tester et essayez d'ouvrir une connection au port 1433.

Si vous avez besoin de servers spécifiques, utilisez WMI. Si vous voulez juste tous les servers disponibles:

http://support.microsoft.com/kb/q287737/

System.Data.Sql.SqlDataSourceEnumerator renverra toutes les instances de SQL Server en cours d'exécution.
Lien MSDN

SqlDataSourceEnumerator vous donne toutes les instances mais elles ne sont pas nécessairement en cours d'exécution. Pour les instances locales de SQL, vous pouvez utiliser l'object 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'object ServiceController, et vous pouvez vérifier la propriété "Status" – Arrêté, en cours d'exécution, en instance, etc Ainsi, vous pouvez filterr "Running" ceux

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