检测SQL Server是否正在运行
我正在寻找一种轮询不同服务器并检查SQL Server是否已启动并正在运行的方法。我正在用C#编写代码。我并不特别在乎单个数据库,只是SQL Server正在运行且响应迅速。
有任何想法吗?
解决方案
回答
好吧,暴力解决方案是尝试在每个服务器上启动与数据库的连接。这将告诉我们它是否正在运行,尽管我们可能会遇到超时问题。
更好的解决方案(但更困难...并非总是这样吗?)解决方案是使用WMI连接到远程计算机并找出SQL Server进程是否正在运行。
回答
使用TCPClient类来创建将TCP连接到给定IP地址的通用函数。
然后遍历要测试的服务器列表,并尝试打开与端口1433的连接。
回答
如果需要特定的服务器,请使用WMI。如果只希望所有可用的服务器:
http://support.microsoft.com/kb/q287737/
回答
我当然会同意文森特的回答。只要绝对确定我们正在关闭并正确处置tcp连接,等等。如果我们只想这样做,那么WMI对我来说似乎有些矫kill过正。
回答
System.Data.Sql.SqlDataSourceEnumerator将返回当前正在运行的SQL Server的所有实例。
MSDN链接
回答
SqlDataSourceEnumerator为我们提供了所有实例,但它们不一定正在运行。
对于SQL的本地实例,可以使用ServiceController对象,名称空间System.ServiceProcess。服务名称是SqlDataSourceEnumerator中" MSSQL $"和" InstanceName"的缩写。设置ServiceController对象的ServiceName属性,然后可以检查" Status"属性" Stopped"," Running"," Pending"等。因此,我们可以过滤" Running"的属性