6

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

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

  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)(延迟 = 5))))"
  4. 我们将 db1_vip/db2_vip 以及 2 个 oracle 实例的实际 ip 添加到两个应用服务器的 /etc/hosts
  5. oracle实例和应用服务器之间有防火墙,但是我们在两个oracle实例上都打开了1521端口。

我们已经运行以下测试来检查网络或 Oracle TNS 监听器是否有任何问题:

  1. 从应用服务器运行 ping 到两个 oracle 实例,一切正常,没有任何数据包丢失。
  2. 从应用服务器远程登录 1521 端口到两个 oracle 实例,没有错。
  3. tnsping 也可以正常工作。
  4. 我们检查了监听器日志,但没有发现任何有价值的东西。

最奇怪的是,这个错误在一个应用服务器上每小时发生大约 10 次,但在另一个应用服务器上每天只发生 1 或 2 次。

任何人都可以阐明这个错误吗?

谢谢

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

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

  1. 禁用应用服务器和数据库服务器之间的防火墙
  2. 使用 ip 而不是主机名
  3. 使用wireshark检查是否有任何tcp数据包问题。

都没有成功,求大神帮忙~

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

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
4

2 回答 2

6

错误

java.sql.SQLException:Io 异常:网络适配器无法建立连接

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

于 2012-09-25T09:02:39.920 回答
-1

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

于 2014-11-10T14:11:59.627 回答