Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查数据库是否正在运行或未使用Java_Java_Oracle_Triggers_Polling - Fatal编程技术网

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

检查数据库是否正在运行或未使用Java,java,oracle,triggers,polling,Java,Oracle,Triggers,Polling,我想从java代码中找出我的数据库是否正在运行。我不确定哪种方法最有效。最明显的是有一个线程定期轮询数据库。另一种方法是使用触发器。我不太精通触发器,但我知道你可以为更新、插入和删除触发触发器。但是,有可能在数据库关闭时触发触发器吗?这对我来说毫无意义,当数据库关闭时触发器会工作 PS:我们现在使用的数据库是oracle,但我相信同样的解决方案可以应用于任何数据库 感谢触发器通常是服务器端结构;因此,要“触发触发器”,首先需要能够连接到DB,这需要它启动,但这并没有帮助 你“检查服务器是否启动”

我想从java代码中找出我的数据库是否正在运行。我不确定哪种方法最有效。最明显的是有一个线程定期轮询数据库。另一种方法是使用触发器。我不太精通触发器,但我知道你可以为更新、插入和删除触发触发器。但是,有可能在数据库关闭时触发触发器吗?这对我来说毫无意义,当数据库关闭时触发器会工作

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


感谢

触发器通常是服务器端结构;因此,要“触发触发器”,首先需要能够连接到DB,这需要它启动,但这并没有帮助

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

如果这是第二个原因,假设您使用的是JavaOracle驱动程序,那么您将从失败的调用中得到一个异常

编写调用代码以捕获这些异常,并重新尝试连接以重试调用。这样,您就不需要轮询数据库;当连接断开时,您只需响应(不经常发生的)事件

如果您尝试重新连接5次左右,但无法重新连接,则可以通知呼叫方数据库已关闭,并向管理员发送电子邮件或其他信息


这里有很多策略,但要点是,如果您试图确保调用执行,只需等待java驱动程序失败并告诉您,而不是在单独的线程上轮询DB服务器。不需要这样做。

触发器通常是服务器端结构;因此,要“触发触发器”,首先需要能够连接到DB,这需要它启动,但这并没有帮助

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

如果这是第二个原因,假设您使用的是JavaOracle驱动程序,那么您将从失败的调用中得到一个异常

编写调用代码以捕获这些异常,并重新尝试连接以重试调用。这样,您就不需要轮询数据库;当连接断开时,您只需响应(不经常发生的)事件

如果您尝试重新连接5次左右,但无法重新连接,则可以通知呼叫方数据库已关闭,并向管理员发送电子邮件或其他信息


这里有很多策略,但要点是,如果您试图确保调用执行,只需等待java驱动程序失败并告诉您,而不是在单独的线程上轮询DB服务器。不需要这样做。

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

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


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

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

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


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

我实际上正在创建一个仪表板应用程序,让人们可以查看每个服务器的状态。所以,我需要实时知道数据库是否关闭。如果数据库关闭,我需要立即更新仪表板应用程序中的状态;然后是,在仪表板启动时轮询它,或者在服务器端编写一个简单的轮询机制,尝试在DB上执行一个非常简单的操作,如“SELECT*FROM user LIMIT 1”或一些应该立即执行并返回的无意义操作。捕获驱动程序中的任何异常,更新仪表板并让它知道服务器已关闭。我实际上正在创建一个仪表板应用程序,让人们查看每个服务器的状态。所以,我需要实时知道数据库是否关闭。如果数据库关闭,我需要立即更新仪表板应用程序中的状态;然后是,在仪表板启动时轮询它,或者在服务器端编写一个简单的轮询机制,尝试在DB上执行一个非常简单的操作,如“SELECT*FROM user LIMIT 1”或一些应该立即执行并返回的无意义操作。从driv捕获任何异常