ORACLE : Io exception: The Network Adapter could n

2020-04-03 04:29发布

问题:

We are getting this error sporadically. With the same TNS, we are able to make proper connections to the database. But we see this in the logs while make connections some times. Following is the stack trace. This is db connection to Oracle from a Linux machine and java application Any help is appreciated.

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.(PhysicalConnection.java:439) at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:165) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:297) at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:221) at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java:157) at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:94) at oracle.jdbc.pool.OracleImplicitConnectionCache.makeCacheConnection(OracleImplicitConnectionCache.java:1567) at oracle.jdbc.pool.OracleImplicitConnectionCache.getCacheConnection(OracleImplicitConnectionCache.java:478) at oracle.jdbc.pool.OracleImplicitConnectionCache.getConnection(OracleImplicitConnectionCache.java:347) at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:404) at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:189) at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:165)

回答1:

try following

  1. (obvious) IP address is incorrect - try PING
  2. The port is not open, or is blocked by a firewall - try TELNET
  3. The DB listener is not running or is binding to a different network interface - again, TELNET should confirm this (also use Oracle client tools to connect)
  4. No local ports are available for the out-going connection (unlikely) - only if you're making thousands of connections, or creating hundreds of new connections every minute.


回答2:

Seems the connection pool runs out of connections... When DBMS listener's incoming request buffer is overloaded by many simultaneous connection requests. It will fail some of them.

you can have the thread sleep a bit (half-second to a second or so) between successive connection requests. After that, don't close connections until they're broken. Keep them and re-use them.



回答3:

Check https://forums.oracle.com/forums/thread.jspa?messageID=2540479, maybe you must change listener.ora's file host parameter to your host parameter. You can check that what parameter is your hostname in windows, cmd>hostname