IOException:网络适配器无法建立连接

时间:2012-09-25 07:38:15

标签: java oracle jdbc

我们不时在我们的生产环境中开始有这个“网络适配器无法建立连接”问题,我做了很多谷歌并在这里经历了一些问题,但仍然没有得到解决方案。

以下是有关我们环境的一些信息:

  1. 我们正在使用RAC和2个oracle实例(版本10.2.0.4)。
  2. 我们在RAC上运行了几个应用服务器(JBoss AS5)。
  3. oracle-ds.xml中的连接url是“jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = db1_vip)(PORT = 1521))(ADDRESS =( PROTOCOL = TCP)(HOST = db2_vip)(PORT = 1521))(LOAD_BALANCE = yes))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = G1db)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 120)(DELAY = 5))))“
  4. 我们将db1_vip / db2_vip以及2个oracle实例的实际ip添加到两个应用服务器的/ etc / hosts中
  5. oracle实例和应用服务器之间有防火墙,但我们在两个oracle实例上都打开了1521端口。
  6. 我们运行以下测试来检查网络或oracle TNS监听器是否有任何问题:

    1. 从app服务器运行ping到两个oracle实例,一切正常,没有任何数据包丢失。
    2. 将1521端口从应用服务器telnet到两个oracle实例,没有错。
    3. tnsping也可以。
    4. 我们检查了听众日志,但没有发现任何有价值的内容。
    5. 最奇怪的是,这个错误在一台应用服务器上每小时发生10次左右,但在另一台应用服务器上每天只发生1到2次。

      有人可以解释这个错误吗?

      由于

      [EDIT4]:我们在找到一个oracle实例时发现超时问题,所以我们更改了jdbc url只连接一个实例,发现IOException再也没发生过,所以我们认为问题与数据库和DBA团队将继续研究这个问题。

      [EDIT3]:我们做了以下尝试:

      1. 在应用服务器和数据库服务器之间禁用防火墙
      2. 使用ip而不是主机名
      3. 使用wireshark检查是否存在任何tcp数据包问题。
      4. 他们都没有成功,有人请帮忙〜

        [编辑]:错误堆栈跟踪:

        java.sql.SQLException: Io Exception: The Network Adapter could not establish the connection
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
            at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
            at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414)
            at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
            at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
            at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
            at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:207)
            ... 5 more
        

2 个答案:

答案 0 :(得分:6)

错误

  

java.sql.SQLException:Io例外:网络适配器不能   建立连接

Java/JDBC无关。 这是您的网络设置出现问题时出现的错误。我的猜测,防火墙问题。你可以禁用它,看看错误是否仍然存在?

答案 1 :(得分:-1)

编辑连接并测试它虽然找到你的tnsping!,如果使用virtualbox(在适配器检查允许所有),在我的情况下,错误是当我使用ip,而不是使用localhost