使用Java检查数据库是否正在运行

时间:2012-02-13 17:23:54

标签: java oracle triggers polling

我想从我的java代码中查看我的数据库是否正在运行。我不确定哪种方法最有效。最明显的一个是有一个定期轮询数据库的线程。另一种方法是使用触发器。我不熟悉触发器,但我知道你可以触发更新,插入和删除的触发器。但是,当数据库关闭时是否可以触发触发器?当数据库关闭时,触发器工作是没有意义的。

PS:我们现在使用的数据库是oracle,但我相信同样的解决方案可以应用于任何数据库

由于

2 个答案:

答案 0 :(得分:2)

触发器通常是服务器端构造;所以要“触发一个触发器”,你需要能够首先连接到数据库,这需要它启动,这无济于事。

“检查服务器是否启动”的动机是什么?是否经常崩溃,或者您是否在执行数据库调用之前要特别小心,因为数据库没有崩溃或网络连接丢失?

如果这是第二个原因,假设您正在使用Java Oracle驱动程序,那么您将从失败的调用中获得异常。

对您的呼叫进行编码以捕获这些异常并重新尝试连接以重试呼叫。这样您就不需要轮询数据库了;您只需在连接失效时响应(偶发)事件。

如果你尝试5次左右重新连接而不能,那么你可以通知呼叫者数据库已经死亡并向你的管理员发送电子邮件等。

这里有许多策略,但重点是如果你试图确保调用执行,只需等待java驱动程序失败并告诉你,而不是在一个单独的线程上轮询数据库服务器。没必要。

答案 1 :(得分:1)

如果这是状态仪表板应用程序,我会建议(每分钟?每10秒?)检查一下您监控的每个数据库服务器。如果您无法使用ICMP ping或尝试打开与端口的连接来ping设备,则应该是高级别警报,指示完全硬件故障或网络故障。如果可以ping,请尝试连接到数据库端口。如果不能,则表示某些软件故障。

如果此方法有效,请尝试运行简单查询。如果这会引发异常,则会出现其他一些软件错误。如果它工作,但慢于某个预设阈值,它本身可能不是错误,而是服务器“在水下”的指示。您可能希望在仪表板上点亮黄色。

您还可以尝试监控数据库CPU负载和总CPU负载,使用的交换文件数量等,以评估服务器的状态。