Ошибка сброса соединения Oracle 11g

Я вижу приведенную ниже ошибку при попытке подключиться к Oracle 11g на Red Hat Linux, 64-бит, используя тонкие драйверы jdbc. Был бы очень признателен, если кто-нибудь может пролить больше света на то, как решить эту проблему.

 Caused by: java.net.SocketException: Connection reset
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
    at oracle.net.ns.DataPacket.send(DataPacket.java:199)
    at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:227)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1122)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)

6 ответов


вы не включили какие-либо детали проблемы, например, что изменилось? Это новая конфигурация для вас или она внезапно перестала работать? Вы знаете, есть ли у вас достаточно доступных соединений? Это происходит с каждым соединением или оно прерывистое?

учитывая, что ошибка возникает во время процесса входа в систему, несколько возможностей:

  1. сеть вина
  2. вы исчерпали максимальное количество соединений, поэтому Oracle вешает трубку вы.
  3. ограничения брандмауэра
  4. проблема с сервером базы данных или слушателя. Обработка, обслуживающая ваш сеанс, может завершиться сбоем после его открытия.

Проверьте следующий поток stackoverflow о том, как проверить количество активных соединений и макс. Я ожидал бы ошибки "ORA-00018: максимальное количество сеансов превышено", если бы это было проблемой, поэтому это может быть не так. Но это стоит проверить.

как проверьте максимальное количество разрешенных подключений к базе данных Oracle?


У нас было что-то очень похожее, переместил программу с 32-битной на 64-битную ОС, и ряд параллельных процессов вызвал бы ошибку ввода-вывода: сброс соединения.

наткнулся на это, который исправил его:

https://community.oracle.com/message/3701989

в основном добавьте-Djava.безопасность.egd=файл: / dev/.параметр / urandom и хорошо идти:)


я столкнулся с аналогичной проблемой с импортом Sqoop Oracle, и я реализовал исправление, предложенное этим ссылке

этот параметр помог решить проблему:

-Dmapred.child.java.opts="-Djava.security.egd=file:///dev/urandom"

и я изменил mapred-сайт.значение имени свойства конфигурации xml как:

mapreduce.admin.map.child.java.opts -Djava.security.egd=file:///dev/urandom

Это немного специфично для sqoop, но я думаю, что настройка опции JVM -Djava.security.egd=file:///dev/urandom" поможет вам решить проблему.


поскольку стек не указывает на ORAs, у вас есть основные проблемы с сетью.


была такая же проблема-не удалось в Linux (иногда), работал на Windows (всегда).

читайте о причине (и решении) на этих сайтах:


другая вещь, которая вызывала у меня эту проблему, былахоста настройки неправильно. Моя попытка подключения была повешена на:

"main" prio=10 tid=0x00007f7cc8009000 nid=0x2f3a runnable [0x00007f7cce69e000]
   java.lang.Thread.State: RUNNABLE
        at java.net.Inet4AddressImpl.getLocalHostName(Native Method)
        at java.net.InetAddress.getLocalHost(InetAddress.java:1444)
        at sun.security.provider.SeedGenerator.run(SeedGenerator.java:176)
        at sun.security.provider.SeedGenerator.run(SeedGenerator.java:162)
        at java.security.AccessController.doPrivileged(Native Method)

поэтому убедитесь, что у вас есть запись для вашего хоста в /etc/hosts/.

если вы такой:

$ hostname
my.server.com

вам нужна строка в вашем /etc/hosts:

127.0.0.1 my my.server.com