如何在没有连接的情况下检查数据库是否正常运行
本文关键字:检查 情况下 数据库 是否 正常运行 连接 | 更新日期: 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应用程序的通信方式)。