检测 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 是不是正在运行的主要内容,如果未能解决你的问题,请参考以下文章

从 sql server 读取数据时检测到自引用循环

如何检测webpack-dev-server是否正在运行?

Sql Server 检测死锁的SQL语句

什么会导致npm live-server停止检测文件更改?

django - 如何检测测试环境(检查/确定是不是正在运行测试)

SQL Server:检测库存变化