【发布时间】:2010-09-06 14:00:01
【问题描述】:
我正在寻找一种方法来轮询不同的服务器并检查 SQL 服务器是否已启动并正在运行。我正在用 C# 编写代码。我并不特别关心单个数据库,只关心 SQL 服务器正在运行和响应。
有什么想法吗?
【问题讨论】:
标签: c# sql-server
我正在寻找一种方法来轮询不同的服务器并检查 SQL 服务器是否已启动并正在运行。我正在用 C# 编写代码。我并不特别关心单个数据库,只关心 SQL 服务器正在运行和响应。
有什么想法吗?
【问题讨论】:
标签: c# sql-server
好吧,蛮力解决方案是尝试在每台服务器上启动与数据库的连接。这将告诉您它是否正在运行,尽管您可能会遇到超时问题。
更优雅(但更困难......不总是这样吗?)的解决方案是使用 WMI 连接到远程计算机并确定 SQL 服务器进程是否正在运行。
【讨论】:
System.Data.Sql.SqlDataSourceEnumerator 将返回当前运行的所有 SQL Server 实例。
MSDN Link
【讨论】:
使用TCPClient Class 创建一个通用函数,在 TCP 中连接到给定的 IP 地址。
然后遍历您要测试的服务器列表并尝试打开到端口 1433 的连接。
【讨论】:
如果您需要特定的服务器,请使用 WMI。如果您只想要所有可用的服务器:
【讨论】:
SqlDataSourceEnumerator 为您提供所有实例,但它们不一定正在运行。 对于 SQL 的本地实例,您可以使用 ServiceController 对象、命名空间 System.ServiceProcess。服务名称是来自 SqlDataSourceEnumerator 的“MSSQL$”和“InstanceName”的连接。设置 ServiceController 对象的 ServiceName 属性,您可以检查“状态”属性 - 已停止、正在运行、已挂起等。因此,您可以过滤“正在运行”的属性
【讨论】:
我当然会同意文森特的回答。只需绝对确定您正在关闭并正确处理 tcp 连接等。如果这就是您所追求的,WMI 对我来说似乎有点矫枉过正。
【讨论】: