【问题标题】:Detecting if SQL server is running检测 SQL Server 是否正在运行
【发布时间】:2010-09-06 14:00:01
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: c# sql-server


    【解决方案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 对我来说似乎有点矫枉过正。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-25
            • 2012-07-22
            • 1970-01-01
            • 1970-01-01
            • 2016-10-21
            • 2012-01-20
            • 2012-12-25
            • 1970-01-01
            相关资源
            最近更新 更多