2008-08-22 19 views
6

Estoy buscando una forma de sondear diferentes servidores y verificar que el servidor SQL esté en funcionamiento. Estoy escribiendo mi código en C#. No me preocupan particularmente las bases de datos individuales, solo que el servidor SQL se está ejecutando y es receptivo.Detectando si el servidor SQL se está ejecutando

¿Alguna idea?

Respuesta

5

Bueno, la solución de fuerza bruta es intentar iniciar una conexión con la base de datos en cada servidor. Eso le dirá si se está ejecutando, aunque podría tener problemas de tiempo de espera.

La solución más elegante (pero más difícil ... ¿no es siempre así?) Sería utilizar WMI para conectarse a la máquina remota y averiguar si el proceso del servidor SQL se está ejecutando.

+0

ummm..solo un toque en la solución de fuerza bruta, diga usted tenía una lista de conexiones, en Framework 4 se podía pensar en foreach.parallel y esperar la asin del resultado obtenido. Todavía veo problemas de rendimiento, Danny? Solo estoy tratando de ver dónde tienen sentido las cosas paralelas ... – Perpetualcoder

+0

lista de cadenas de conexión para ser precisas – Perpetualcoder

+0

?? Tal vez me perdí algo, pero no veo el punto que intentas hacer. – TheSmurf

2

Utilice TCPClient Class para crear una función genérica que conecte en TCP a una dirección IP determinada.

A continuación, iterar sobre la lista de servidores que desea probar y tratar de abrir una conexión al puerto 1433.

0

Sin duda ir con la respuesta de Vicente. Solo asegúrate de que estás cerrando y desechando las conexiones tcp de manera adecuada, etc. WMI parece un poco exagerado para mí si eso es todo lo que buscas.

2

System.Data.Sql.SqlDataSourceEnumerator devolverá todas las instancias de SQL Server actualmente en ejecución.
MSDN Link

+0

Obtengo los mismos resultados que cuando uso el código SQLDMO 3 de 6 reconocidos. –

2

SqlDataSourceEnumerator le proporciona todas las instancias pero no necesariamente se están ejecutando. Para las instancias locales de SQL, puede usar el objeto ServiceController, espacio de nombres System.ServiceProcess. El nombre del servicio es una conjunción de "MSSQL $" e "InstanceName" de SqlDataSourceEnumerator. Establezca la propiedad ServiceName del objeto ServiceController, y puede marcar la propiedad "Estado" - Stopped, Running, Pended, etc. Por lo tanto, puede filtrar "Running"

Cuestiones relacionadas