2008-08-22 14 views
6

Szukam sposobu odpytywania różnych serwerów i sprawdzenia, czy serwer SQL jest uruchomiony. Piszę mój kod w języku C#. Nie dbam szczególnie o poszczególne bazy danych, tylko o to, że serwer SQL działa i reaguje.Wykrywanie, czy serwer SQL jest uruchomiony

Wszelkie pomysły?

Odpowiedz

5

Rozwiązanie typu brute force polega na próbie zainicjowania połączenia z bazą danych na każdym serwerze. To ci powie, czy to działa, ale możesz mieć problemy z przekroczeniem limitu czasu.

Bardziej elegancka (ale trudniejsza ... czy nie zawsze tak jest?) Rozwiązaniem byłoby skorzystanie z usługi WMI w celu połączenia się ze zdalnym komputerem i sprawdzenia, czy działa proces serwera SQL.

+0

ummm .. po prostu potraktować rozwiązanie brute force, powiedz, że miał listę połączeń, w Framework 4 można było myśleć o foreach. równolegle i czekać na wynikowy asynchroniczny wynik. nadal widzisz problemy z perfekcją Danny? Po prostu próbuję zobaczyć, gdzie równoległe rzeczy mają sens ... – Perpetualcoder

+0

lista ciągów połączenia, aby być precyzyjnym – Perpetualcoder

+0

?? Może coś przeoczyłem, ale nie widzę sensu, który próbujesz osiągnąć. – TheSmurf

2

Użyj TCPClient Class, aby utworzyć ogólną funkcję, która łączy się w TCP z danym adresem IP.

Następnie iteracyjne nad listą serwerów chcesz przetestować i spróbować otworzyć połączenie do portu 1433.

0

pewnością iść z odpowiedzią Vincenta. Po prostu upewnij się, że zamykasz i oddzielasz połączenia TCP, itp. WMI wydaje mi się trochę przesadna, jeśli tylko o to ci chodzi.

2

System.Data.Sql.SqlDataSourceEnumerator zwróci wszystkie wystąpienie aktualnie uruchomionego serwera SQL.
MSDN Link

+0

Otrzymuję takie same wyniki, jak gdy używam kod SQLDMO 3 z 6 rozpoznanych. –

2

SqlDataSourceEnumerator daje wszystkie wystąpienia, ale niekoniecznie są uruchomione. W przypadku lokalnych wystąpień SQL można użyć obiektu ServiceController, namespace System.ServiceProcess. Nazwa usługi jest konkatinacją "MSSQL $" i "InstanceName" z SqlDataSourceEnumerator. Ustaw właściwość ServiceName obiektu ServiceController, a możesz sprawdzić właściwość "Status" - Zatrzymano, Uruchomiono, Pending itp. W związku z tym można filtrować "Działające" jedynki

Powiązane problemy