如何在没有连接的情况下检查数据库是否正常运行

本文关键字:检查 情况下 数据库 是否 正常运行 连接 | 更新日期: 2023-09-27 18:19:37

我使用这样的oledbconnection:

try
{
    OleDbConnection Conn;
    using (Conn = new OleDbConnection("Provider=MSDAORA.1;Data Source=DATABASE1:1521/orcl;Persist Security Info=True;Password=PASSWORD;User ID=USERNAME"))
        {
            Conn.Open();
            v1 = 1;
            Conn.Close();
        }
}
catch (Exception)
{
    v1 = 0;
}

在面板上使用v1,如下所示:

if (v1 == 1)
{
    Panel1.BackColor = System.Drawing.Color.Yellow;
}
if (v1 == 0)
{
    Panel1.BackColor = System.Drawing.Color.Red;
}

这很简单,对我来说很有效。当我打开这个页面,打开和关闭连接时,面板颜色是黄色或红色。

但我想检查20多个这样的数据库。当我打开这个页面时,20个连接打开,页面等待太多。当然,每次数据库连接打开时。我可以使用outputcache,但我需要每30秒检查一次(我在这个页面上使用html刷新)。

用其他方法我该怎么做?我可以用tnsping吗?如果是,我如何使用tnsping数据库。

(此服务器上不允许Ping,我不想检查服务器是否启动,我想检查数据库是否启动)

如何在没有连接的情况下检查数据库是否正常运行

您需要连接到数据库以检查它是否已启动。tnsping仅检查套接字是否可用。无法保证您尝试连接的数据库是否已启动。

IMHO,您可以运行多个线程并并行连接。然后,在数据库不可访问的情况下,您可以捕获适当的异常并获得适当的信息。

检查它是否连接到数据库的简单方法。如果服务器没有启动,那么它最终将抛出一个SqlException,您可以检查异常对象的Error属性,该对象是sqlError对象的集合。

用其他方法我该怎么做?

没有通用的方法来检查网络资源的可用性。可能有一些间接的方法(如ICMP、套接字可用性等),但它们不能保证任何东西。正确的方法是尝试连接到资源(在您的情况下是数据库)。

但我想检查20多个这样的数据库。当我打开这个页面,20个连接打开,页面等待了这么多

这看起来像是架构问题。

如果这个页面类似于基础设施监控软件,我会编写一个常规(Windows)服务作为后端,它会定期并行拉取数据库(使用async/await是最好的选择,IMO)。

然后,web前端应该拉动此服务以获得结果。由于结果可以存储在本地数据库中,也可以存储在内存中,因此响应时间将相当快(这取决于服务和web应用程序的通信方式)。