2008-08-22 4 views
6

다른 서버를 폴링하고 SQL 서버가 실행 중인지 확인하는 방법을 찾고 있습니다. 내 코드를 C#으로 작성하고있다. 필자는 특히 개별 데이터베이스는 신경 쓰지 않으며 SQL 서버가 실행 중이고 응답 성이 뛰어납니다.SQL 서버가 실행 중인지 감지

아이디어가 있으십니까?

답변

5

글쎄, 무력의 해결책은 각 서버에서 데이터베이스와의 연결을 시도하는 것입니다. 시간 초과 문제가있을 수 있지만 실행 여부를 알려줍니다.

더 우아하지만 (더 어렵습니다 ... 항상 그런 방식이 아닙니까?) 솔루션은 WMI를 사용하여 원격 컴퓨터에 연결하고 SQL 서버 프로세스가 실행 중인지 확인하는 것입니다.

+0

ummm .. 프레임 워크 4에서는 foreach.parallel에 대해 생각해 볼 수 있고 결과가 비동기식이 될 때까지 기다릴 수 있습니다. 여전히 퍼프 대니가 보이니? 난 그냥 병렬 물건이 의미가 어디 있는지 보려고 ... – Perpetualcoder

+0

정확한 연결 문자열 목록 – Perpetualcoder

+0

?? 어쩌면 내가 뭔가를 놓쳤을지도 모르지만, 당신이하려고하는 요점을보고 있지 않습니다. – TheSmurf

2

TCPClient Class을 사용하면 TCP에서 주어진 IP 주소로 연결하는 일반 기능을 만들 수 있습니다.

그런 다음 테스트 할 서버 목록을 반복하고 WMI를 사용하여 특정 서버가 필요한 경우 포트 1433

0

나는 확실히 빈센트의 답을 갈 것입니다. 그냥 당신이 폐쇄하고 TCP 연결을 적절하게 처분하고 있는지 확인하십시오. WMI는 그것이 전부라면 나에게 잔인한 것 같습니다.

2

System.Data.Sql.SqlDataSourceEnumerator은 현재 실행중인 SQL Server의 모든 인스턴스를 반환합니다.
MSDN Link

+0

나는 6 개의 SQLDMO 코드를 사용할 때와 같은 결과를 얻는다. –

2

SqlDataSourceEnumerator는 당신에게 모든 인스턴스를 제공하지만 그들은 반드시 실행되고 있지 않습니다. 로컬 SQL 인스턴스의 경우 ServiceController 객체 인 네임 스페이스 System.ServiceProcess를 사용할 수 있습니다. 서비스 이름은 SqlDataSourceEnumerator에서 "MSSQL $"및 "InstanceName"의 concatination입니다. ServiceController 객체의 ServiceName 속성을 설정하면 "Status"속성 - Stopped, Running, Pended 등을 확인할 수 있습니다. 따라서 "Running"을 필터링 할 수 있습니다.

관련 문제