Oracle Проблема неустойчивого соединения JDBC

Я испытываю очень странную проблему, Это - очень простое использование 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(); }
    }
}
59
задан reevesy 27 September 2016 в 20:57
поделиться

3 ответа

Трудно сказать, но если бы я проверял актуальную версию драйвера JDBC. Убедитесь, что это 11.1.0.6.

Oracle не включает версию базы данных в имя файла. Таким образом, имя драйвера для версии 11.2 совпадает с именем драйвера для версии 11.1 - ojdbc5.jar. Я бы извлек файл jar драйвера и нашел файл MANIFEST.MF, он будет содержать некоторую информацию о версии. Убедитесь, что версия драйвера JDBC соответствует версии вашей базы данных. Я подозреваю, что это может быть проблема с версией, поскольку на странице загрузки Oracle 11.1.0.6 нет jar-файла с именем ojdbc14.jar.

Если версия совпадает - у меня нет идей :)

3
ответ дан 24 November 2019 в 18:18
поделиться

Для управления кэшируемостью страницы используйте 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 может быть исключена меньше или больше. Оставил позади остальные возможные причины. Я предлагаю начать с просмотра журналов сервера БД.

6
ответ дан 24 November 2019 в 18:18
поделиться

Я столкнулся с той же проблемой. В 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: сброс соединения»).

Проблема двоякая

  1. JVM пытается перечислить все файлы в / tmp (или альтернативном каталоге tmp, заданном -Djava.io.tmpdir), когда SecureRandom.nextBytes (byte []) {{1} } вызывается. Если количество файлов велико, методу требуется много времени для ответа и, следовательно, тайм-аут сервера

  2. Метод void nextBytes (byte []) использует / dev / random в Linux и на некоторых машинах. в которых отсутствует оборудование для генерации случайных чисел, операция замедляется до такой степени, что останавливает весь процесс входа в систему . В конечном итоге пользователь сталкивается с SQLException («Исключение Io : сброс соединения»)

Пользователи, обновляющиеся до 11g, могут столкнуться с этой проблемой, если базовой ОС является Linux, работающая на неисправном оборудовании.

Причина Причина этого еще точно не установлена. Это может быть либо проблемой в вашем оборудовании, либо тем фактом, что по какой-то причине программное обеспечение не может читать данные из dev / random

Решение Измените настройки для вашего приложения, чтобы добавить следующий параметр для java-команды:

-Djava.security.egd = file: / dev /../ dev / urandom

Мы внесли это изменение в наш файл java.security, и он избавился из ошибки.

, который решил мою проблему.

17
ответ дан 24 November 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: