Я испытываю очень странную проблему, Это - очень простое использование JDBC, соединяющегося с базой данных Oracle
OS: Ubuntu
Java Version: 1.5.0_16-b02
1.6.0_17-b04
Database: Oracle 11g Release 11.1.0.6.0
Когда я использую файл банки OJDBC14.jar
это соединяется с базой данных каждый раз, Когда я использую файл банки OJDBC5.jar
это соединяется несколько раз и другие времена, это бросает ошибку (показанный ниже), Если я перекомпилировал с Java 6 и использованием OJDBC6.jar
Я получаю те же результаты как OJDBC5.jar
Мне нужны определенные функции в JODB5.jar, которые не доступны в OJDBC14.jar
Любые идеи
Ошибка
> Connecting to oracle
java.sql.SQLException: Io exception: Connection reset
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:74)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:494)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:411)
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(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at TestConnect.main(TestConnect.java:13)
Код
Ниже код, который я использую
import java.io.*;
import java.sql.*;
public class TestConnect {
public static void main(String[] args) {
try {
System.out.println("Connecting to oracle");
Connection con=null;
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection(
"jdbc:oracle:thin:@172.16.48.100:1535:sample",
"JOHN",
"90009000");
System.out.println("Connected to oracle");
con.close();
System.out.println("Goodbye");
} catch(Exception e) { e.printStackTrace(); }
}
}
Трудно сказать, но если бы я проверял актуальную версию драйвера JDBC. Убедитесь, что это 11.1.0.6.
Oracle не включает версию базы данных в имя файла. Таким образом, имя драйвера для версии 11.2 совпадает с именем драйвера для версии 11.1 - ojdbc5.jar. Я бы извлек файл jar драйвера и нашел файл MANIFEST.MF, он будет содержать некоторую информацию о версии. Убедитесь, что версия драйвера JDBC соответствует версии вашей базы данных. Я подозреваю, что это может быть проблема с версией, поскольку на странице загрузки Oracle 11.1.0.6 нет jar-файла с именем ojdbc14.jar.
Если версия совпадает - у меня нет идей :)
Для управления кэшируемостью страницы используйте StartResponse.Cache . Это дает возможность управлять такими параметрами, как истечение срока действия страницы из кэша и HTTP-заголовков Cache-Control.
-121--4028596-require 'ruby-debug'
class Exception
alias original_initalize initialize
def initialize(*args)
original_initalize(*args)
debugger
end
end
При этом запустится исходное исключение, а также отладчик вызовов
-121--2827298-Сообщение об ошибке «сброс соединения» обычно означает, что другая сторона прервала соединение во время попытки создания соединения (квитирование). Это имеет много возможных причин. Ошибка в драйвере JDBC, тайм-аут на стороне БД, перезапуск базы данных, отсутствие доступных подключений к БД, плохое качество сети, плохой антивирусный сканер/брандмауэр/прокси и т.д.
Поскольку это происходит периодически, ошибка в драйвере JDBC может быть исключена меньше или больше. Оставил позади остальные возможные причины. Я предлагаю начать с просмотра журналов сервера БД.
Я столкнулся с той же проблемой. В Windows Vista я не мог воспроизвести проблему, но в Ubuntu я постоянно воспроизводил ошибку «сброс соединения».
Я нашел http://forums.oracle.com/forums/thread.jspa?threadID=941911&tstart=0&messageID=3793101
По словам пользователя на этом форуме:
Я открыл заявку в Oracle, и они мне сказали.
java.security.SecureRandom - это стандартный API, предоставляемый Sun. Среди различных методов, предлагаемых этим классом, void nextBytes (byte []) - один. Этот метод используется для генерации случайных байтов. Драйверы Oracle 11g JDBC используют этот API для генерации случайных чисел при входе в систему. Пользователи , использующие Linux, столкнулись с SQLException («Исключение Io: сброс соединения»).
Проблема двоякая
JVM пытается перечислить все файлы в / tmp (или альтернативном каталоге tmp, заданном -Djava.io.tmpdir), когда SecureRandom.nextBytes (byte []) {{1} } вызывается. Если количество файлов велико, методу требуется много времени для ответа и, следовательно, тайм-аут сервера
Метод void nextBytes (byte []) использует / dev / random в Linux и на некоторых машинах. в которых отсутствует оборудование для генерации случайных чисел, операция замедляется до такой степени, что останавливает весь процесс входа в систему . В конечном итоге пользователь сталкивается с SQLException («Исключение Io : сброс соединения»)
Пользователи, обновляющиеся до 11g, могут столкнуться с этой проблемой, если базовой ОС является Linux, работающая на неисправном оборудовании.
Причина Причина этого еще точно не установлена. Это может быть либо проблемой в вашем оборудовании, либо тем фактом, что по какой-то причине программное обеспечение не может читать данные из dev / random
Решение Измените настройки для вашего приложения, чтобы добавить следующий параметр для java-команды:
-Djava.security.egd = file: / dev /../ dev / urandom
Мы внесли это изменение в наш файл java.security, и он избавился из ошибки.
, который решил мою проблему.