【问题标题】:How to detect Oracle database shutdown in JDBC?如何在 JDBC 中检测 Oracle 数据库关闭?
【发布时间】:2016-07-29 07:27:38
【问题描述】:

在一个应用程序中,我们使用 JDBC 连接到 Oracle 数据库。我们已附上。问题是通过回调/侦听器识别数据库已关闭。

目前,我们附加了以下监听器:

Connection eventListener = new ConnectionEventListener() {
    @Override
    public void connectionErrorOccurred(ConnectionEvent event){
        // log - connection error
    }

    @Override
    public void connectionClosed(ConnectionEvent event) {
        // log - connection closed
    }
}

数据库关闭时不会触发这些事件。

这个想法是检测数据库关闭然后数据库启动,并有一个机制来通知用户,并轮询数据库(可配置)或暂停服务(应用程序)。

【问题讨论】:

  • 你是什么意思?!当连接失败时,可能 db 已关闭或其他什么。
  • 还有一种方法可以在数据库未关闭的情况下终止会话,执行以下操作:alter system kill session ','

标签: java database oracle jdbc


【解决方案1】:

您无法正确指定问题。您只能获得连接或无法获得连接,原因(无法连接,数据库关闭等)无法指定,所有这些情况都会出现相同的异常。

【讨论】:

  • 我同意你的看法。有没有其他方法可以检查数据库是否关闭,而不是我的连接有问题。我了解(据我所知),我所能控制的只是我与数据库的连接。
  • @harshchiki 据我所知,没有办法定义出了什么问题。我什至尝试运行 sql plus 和缓存的代码异常,但是对于相同的代码异常的几个不同问题,我很满意。
【解决方案2】:

你可能需要一个事务,所以如果你查询失败,它会给你一个错误,然后你可以检查连接。

【讨论】:

    【解决方案3】:

    恐怕您的请求没有完全定义。例如,在 RAC 集群的情况下,您可以将应用程序配置为响应 ONS 消息,并且您的应用程序可以安全地将所有连接迁移到另一个数据库节点。所以即使一个数据库节点宕机了,你的应用程序仍然可以顺利运行。

    查看JBOSS源代码的简要概述,有一个名为异常排序器的类,它列出了各种有用的Oracle错误代码。 对于example,但我认为当前JBOSS的代码库有更长的列表。

    Here 是我收集的错误代码列表。所有错误代码都表示一种情况,即无法连接到数据库(出于某种原因)。

    PS:DCD(死连接检测)是一个不同的话题。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多