У нас есть несколько серверов, на каждом из которых работает база данных Oracle 11g Release 11.2.0.1.0 — 64bit. Подключаемся через JDBC вот так:
public Connection createConnection(String drvClass, String connURL, String user, String pass)
throws ClassNotFoundException, SQLException {
Class.forName(drvClass);
Connection conn = DriverManager.getConnection(connURL, user, pass);
for (SQLWarning warn = conn.getWarnings(); warn != null; warn = warn.getNextWarning()) {
System.out.println("SQL Warning:");
System.out.println("State : " + warn.getSQLState());
System.out.println("Message: " + warn.getMessage());
System.out.println("Error : " + warn.getErrorCode());
}
return conn;
}
drvClass будет oracle.jdbc.OracleDriver
. Программа, которая пытается подключиться, запускается на каждом сервере. База данных доступна из других программ с точно такими же свойствами соединения.
Также можно запустить эту программу на другом сервере и позволить ей подключиться к проблемной базе данных. Он может установить соединение. Программа не работает, если она запущена на сервере локально. Мы пробовали и IP, и имя сервера.
На одном сервере код висит на DriverManager.getConnection()
и не могу понять почему. Кто-нибудь знает, что может быть причиной этого?
В логах БД нет об этом записи.
Stacktrace блокирующего потока:
"pool-27-thread-1" - Thread t@1483
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at oracle.net.ns.Packet.receive(Packet.java:239)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:255)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:973)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:291)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:474)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.companyname.DBConnectionInternal.DBConnection.createConnection(DBConnection.java:19)
at com.companyname.exportadapter.ExportCollector.initDatabase(ExportCollector.java:259)
at com.companyname.exportadapter.ExportCollector.run(ExportCollector.java:120)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- locked <50be77> (a java.util.concurrent.ThreadPoolExecutor$Worker)
Если я поставлю DriverManager.setLoginTimeout(10)
, то получу Io exception: Socket read timed out
.
SELECT value FROM v$parameter WHERE name = 'sessions'
возвращает 772 возможных соединения. - person Moh-Aw   schedule 26.05.2014