8

我正在寻找一种方法来轮询不同的服务器并检查 SQL 服务器是否已启动并正在运行。我正在用 C# 编写代码。我并不特别关心单个数据库,只关心 SQL 服务器正在运行和响应。

有任何想法吗?

4

6 回答 6

5

好吧,蛮力解决方案是尝试在每台服务器上启动与数据库的连接。这将告诉您它是否正在运行,尽管您可能会遇到超时问题。

更优雅(但更困难......不总是这样吗?)解决方案是使用 WMI 连接到远程计算机并确定 SQL 服务器进程是否正在运行。

于 2008-08-22T17:41:22.050 回答
3

System.Data.Sql.SqlDataSourceEnumerator将返回当前运行的所有 SQL Server 实例。
MSDN 链接

于 2009-01-16T16:56:43.990 回答
2

使用TCPClient 类创建一个在 TCP 中连接到给定 IP 地址的通用函数。

然后遍历您要测试的服务器列表并尝试打开到端口 1433 的连接。

于 2008-08-22T17:43:47.677 回答
2

如果您需要特定的服务器,请使用 WMI。如果您只想要所有可用的服务器:

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

于 2008-08-22T17:44:12.153 回答
2

SqlDataSourceEnumerator 为您提供所有实例,但它们不一定正在运行。对于 SQL 的本地实例,您可以使用 ServiceController 对象、命名空间 System.ServiceProcess。服务名称是来自 SqlDataSourceEnumerator 的“MSSQL$”和“InstanceName”的连接。设置 ServiceController 对象的 ServiceName 属性,您可以检查“状态”属性 - 已停止、正在运行、已挂起等。因此,您可以过滤“正在运行”的

于 2010-11-18T16:21:05.463 回答
0

我当然会接受文森特的回答。只需绝对确定您正在关闭并正确处理 tcp 连接等。如果这就是您所追求的,WMI 对我来说似乎有点矫枉过正。

于 2008-08-22T17:48:22.067 回答