我们的生产环境开始时不时出现这个“网络适配器无法建立连接”的问题,我做了很多谷歌,在这里遇到了一些问题,但仍然没有得到解决方案。
以下是有关我们环境的一些信息:
- 我们将 RAC 与 2 个 oracle 实例(版本 10.2.0.4)一起使用。
- 我们有几个在 RAC 上运行的应用服务器 (JBoss AS5)。
- 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))))"
- 我们将 db1_vip/db2_vip 以及 2 个 oracle 实例的实际 ip 添加到两个应用服务器的 /etc/hosts
- oracle实例和应用服务器之间有防火墙,但是我们在两个oracle实例上都打开了1521端口。
我们已经运行以下测试来检查网络或 Oracle TNS 监听器是否有任何问题:
- 从应用服务器运行 ping 到两个 oracle 实例,一切正常,没有任何数据包丢失。
- 从应用服务器远程登录 1521 端口到两个 oracle 实例,没有错。
- tnsping 也可以正常工作。
- 我们检查了监听器日志,但没有发现任何有价值的东西。
最奇怪的是,这个错误在一个应用服务器上每小时发生大约 10 次,但在另一个应用服务器上每天只发生 1 或 2 次。
任何人都可以阐明这个错误吗?
谢谢
[EDIT4]:我们在tnsping一个oracle实例时发现超时问题,所以我们将jdbc url更改为只连接一个实例,发现IOException再也没有发生过,所以我们认为问题与数据库有关,DBA团队将继续调查这个。
[EDIT3]:我们做了以下尝试:
- 禁用应用服务器和数据库服务器之间的防火墙
- 使用 ip 而不是主机名
- 使用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