检测 SQL Server 是不是正在运行
Posted
技术标签:
【中文标题】检测 SQL Server 是不是正在运行【英文标题】:Detecting if SQL server is running检测 SQL Server 是否正在运行 【发布时间】:2010-09-06 14:00:01 【问题描述】:我正在寻找一种方法来轮询不同的服务器并检查 SQL 服务器是否已启动并正在运行。我正在用 C# 编写代码。我并不特别关心单个数据库,只关心 SQL 服务器正在运行和响应。
有什么想法吗?
【问题讨论】:
【参考方案1】:好吧,蛮力解决方案是尝试在每台服务器上启动与数据库的连接。这将告诉您它是否正在运行,尽管您可能会遇到超时问题。
更优雅(但更困难......不总是这样吗?)的解决方案是使用 WMI 连接到远程计算机并确定 SQL 服务器进程是否正在运行。
【讨论】:
ummm ..只是在蛮力解决方案上戳一下,假设您有一个连接列表,在框架 4 中您可以考虑 foreach.parallel 并等待产生的结果异步。仍然看到性能问题丹尼?我只是想看看平行的东西在哪里有意义...... 准确的连接字符串列表 ??也许我错过了什么,但我没有看到你想要表达的观点。【参考方案2】:System.Data.Sql.SqlDataSourceEnumerator
将返回当前运行的所有 SQL Server 实例。MSDN Link
【讨论】:
我得到的结果与我使用 SQLDMO 代码时所得到的结果相同,其中 6 个已识别。【参考方案3】:使用TCPClient Class 创建一个通用函数,在 TCP 中连接到给定的 IP 地址。
然后遍历您要测试的服务器列表并尝试打开到端口 1433 的连接。
【讨论】:
【参考方案4】:如果您需要特定的服务器,请使用 WMI。如果您只想要所有可用的服务器:
http://support.microsoft.com/kb/q287737/
【讨论】:
【参考方案5】:SqlDataSourceEnumerator 为您提供所有实例,但它们不一定正在运行。 对于 SQL 的本地实例,您可以使用 ServiceController 对象、命名空间 System.ServiceProcess。服务名称是来自 SqlDataSourceEnumerator 的“MSSQL$”和“InstanceName”的连接。设置 ServiceController 对象的 ServiceName 属性,您可以检查“状态”属性 - 已停止、正在运行、已挂起等。因此,您可以过滤“正在运行”的属性
【讨论】:
【参考方案6】:我当然会同意文森特的回答。只需绝对确定您正在关闭并正确处理 tcp 连接等。如果这就是您所追求的,WMI 对我来说似乎有点矫枉过正。
【讨论】:
以上是关于检测 SQL Server 是不是正在运行的主要内容,如果未能解决你的问题,请参考以下文章