Данные для считывания из сокета отсутствуют oracle

Обновлено: 07.07.2024

Мы используем Oracle в качестве базы данных для нашего веб-приложения. Приложение работает хорошо в большинстве случаев, но мы получаем ошибку «Нет данных для чтения из сокета».

Мы используем spring, hibernate, и у меня есть следующее для источника данных в моем файле контекста applciation.

Я не уверен, что это из-за ошибок приложения, ошибок базы данных или сетевых ошибок.

Мы видим следующее в логах Oracle

Версия Oracle: 11.2.0.1.0

Для таких ошибок вы должны привлечь поддержку Oracle. К сожалению, вы не упоминаете, какую версию Oracle вы используете. Ошибка может быть связана с оптимизатором bind peeking. В зависимости от версии Oracle применяются различные обходные пути.

У вас есть два способа решения этой проблемы:

  • обновить до 11,2
  • установить параметр Oracle _optim_peek_user_binds = false

Конечно, параметры подчеркивания следует устанавливать только по рекомендации службы поддержки Oracle.

Мы столкнулись с той же проблемой, мы решили ее, увеличив размер пула соединений initialSize и maxActive .

Вы можете проверить эту ссылку

Может быть, это кому-то помогает.

Другой случай: если вы отправляете параметры даты в параметризованный sql, убедитесь, что вы отправили Java.sql.Timestamp , а не Java.util.Date . В противном случае вы получите

Java.sql.SQLRecoverableException : нет данных для чтения из сокета

Выше не удавалось, пока мы не изменили параметры даты на Java.sql.Timestamp

Попробуйте две вещи:

  1. Установите в $ Oracle_HOME/network/admin/tnsnames.ora на сервере Oracle сервер = выделенный для сервера = общий, чтобы разрешить более одного подключения одновременно. Перезагрузите Oracle.
  2. Если вы используете Java, это может вам помочь: в Java/jdk1.6.0_31/jre/lib/security/Java.security измените securerandom.source=file:/dev/urandom на securerandom.source=file:///dev/urandom

У меня такая же проблема. Мне удалось решить проблему со стороны приложения, по следующему сценарию:

JDK8, Spring Framework 4.2.4.RELEASE, Apache Tomcat 7.0.63, Oracle Database 11g Enterprise Edition 11.2.0.4.0

Я использовал пул соединений с базой данных Apache Tomcat-jdbc :

Вы можете взять следующие параметры конфигурации в качестве ссылки:

Java.sql.SQLRecoverableException: Данные для считывания из сокета отсутствуют

Доброго времени суток! Возникла одна ошибка, с которой не могу разобраться. При разработке модуля на Oracle ADF в среде разработки JDeveloper выходит ошибка при вызове оракловской функции. Лог ошибки:
<15.11.2016 14:10:29 ALMT> <Error> <Default> <INSIS-00000 (***INSIS ERROR MESSAGE***)> <[com.fadata.insis.view.message.Insis MessageService writeMessageToLogger] Данные для считывания из сокета отсутствуют
java.sql.SQLRecoverableException: Данные для считывания из сокета отсутствуют
at oracle.jdbc.driver.T4CMAREngine.unm arshalUB1(T4CMAREngine.java:1204)
at oracle.jdbc.driver.T4CMAREngine.unm arshalSB1(T4CMAREngine.java:1153)
at oracle.jdbc.driver.T4CTTIfun.receiv e(T4CTTIfun.java:312)
at oracle.jdbc.driver.T4CTTIfun.doRPC( T4CTTIfun.java:204)
at oracle.jdbc.driver.T4C8Oall.doOALL( T4C8Oall.java:540)
Truncated. see log file for complete stacktrace
>
<UIXRegion> <_warn> Ошибка при обработке viewId: /CntBlanksTF/CntBlanks URI: /gencnt/taskFlow/CntFormsTF/CntBlanks/CntBlanks.jsff actual-URI: /gencnt/taskFlow/CntFormsTF/CntBlanks/CntBlanks.jsff.
oracle.jbo.SQLStmtException: JBO-27122: SQL error during statement preparation. Statement: SELECT * FROM (SELECT
BEI.EMP_ID AS MAN_ID,
PP.NAME,
BEI.DEPARTMENT_ID,
BEI.RANK_ID
FROM BSO.BSO_EMPLOYEE_INFO BEI JOIN INSIS_CNT_V1.P_PEOPLE PP ON BEI.EMP_ID = PP.MAN_ID) QRSLT WHERE MAN_ID = :Bind_DonorEmpId
at oracle.jbo.server.BaseSQLBuilderImp l.processException(BaseSQLBuilderIm pl.java:3721)

Ошибка возникла после добавления столбца в таблицу с которой работает данная функцию. При этом Commit работает нормально сохраняет введенные данные. А потом после сохранения вызывается функция Оракл и приложение зависает. Выходит окно с ошибкой "Данные для считывания из сокета отсутствуют". В Entity и View Objects добавил данный столбец.
Вызов функции из Java кода:

Репутация: 2
Всего: 2

Есть java приложение которое работает с базой Oracle и GSM модемом через jdbc:oracle:thin
возник указанный ниже ексепшн.Подозреваю что это всё из-за апдейта который не может выполнится из-за блокировки записи в Оракл.Как вообще можна с таким боротся?Проверить заблокирована ли запись или в обработчике чего то написать.
Буду благодарен за любой комментарий.

Репутация: 23
Всего: 44

для понимания ситуации вопросы:
1) данный эксепшн вываливается всегда, или периодически?
2) версия jdbc и версия oracle?
3) можно увидеть исходник котрый выполняется методом executeQuery

ps. а вобще похоже на потерю соединения драйвера с ораклом, т.е. запрос ушел, а получить ответ не удалось.
нечно похожее проскакивало при работе с ораклом 9 с использованием jdbc для оракл 10. (причину не выявили).
вполне может и модем ложать. (но это личный довод, обосновать немогу)

но на вопросы всетаки ответьте.

Репутация: 2
Всего: 2

3)executeQuery заменил на executeUpdate

Репутация: 23
Всего: 44


вобще то я имел ввиду SQL который выполняется, но уже не важно ошибка была точно такая же "socket write error
", я больше чем уверен что проблема не в SQL, а в его вызове и блокировки тут не причем т.к. ошибку явно не оракл вещает, а сами дрова.
немного поясню:
т.к. проблему идентифицировать неудалось в связи с отсутсвием ее описания даже на металинке, по этому буду руководствоваться своими наблюдениями.
ошибка не возникала втой части ПО где при разработке использовались объекты иметоды пакета "import oracle.jdbc.*"
ваш метод sqlOraUpd будет выглядеть примерно так:

еще одна особенность заключалась в том, что логика была реализована на уровне БД(думаю это не так важно):

соответственно ваш параметр oraDoSql должен содержать вызов этой процедуры:

вобщем решать вам реализовывать так как я показал или нет, но попробывать стоит ибо 100%-го лекарства нет.

Репутация: 23
Всего: 44

еще предположение:
возможно при использовании пакета oracle.jdbc, методы используют какие то "особые параметры" для идентфикации коннекта между ораклом и объектом который его определяет, поэтому я больше склоняюсь к потере конекта с БД, чем к магическому действию методов пакета oracle.jdbc.

Leprechaun Software Developer

Репутация: 18
Всего: 534

Цитата
Исключение ввода/вывода: Software caused connection abort: socket write error

проблема в том, что TCP/IP соединение рвется. Какая версия драйвера используется?

Репутация: 23
Всего: 44

Репутация: 2
Всего: 2

Спасибо за помощь. Действительно была потеря коннекта.
Решил с помощью проверки conn.isValid();

Leprechaun Software Developer

Репутация: 18
Всего: 534

Это версия базы, а не драйвера. Там есть драйвера под JDK 1.2, 1.3 и 1.4, так вот драйвер под 1.4 должен показывать дополнительную информацию об ошибке.

Добавлено через 1 минуту и 41 секунду

Некоторые библиотеки сами умеют периодически проверять коннект на валидность.

Репутация: 23
Всего: 44


расковыриваю ojdbc14.jar? лезу в каталог META-INF, открываю файл MANIFEST.MF, внем:

Цитата

Manifest-Version: 1.0
Specification-Title: Oracle JDBC driver classes for use with JDK14
Sealed: true
Created-By: 1.4.2_14 (Sun Microsystems Inc.)
Implementation-Title: ojdbc14.jar
Specification-Vendor: Oracle Corporation
Specification-Version: Oracle JDBC Driver version - "10.2.0.4.0"
Implementation-Version: Oracle JDBC Driver version - "10.2.0.4.0"
Implementation-Vendor: Oracle Corporation
Implementation-Time: Sat Feb 2 11:40:29 2008

Name: oracle/sql/converter/
Sealed: false

Name: oracle/sql/
Sealed: false

Oracle JDBC Driver version - "10.2.0.4.0" - это не оно?

Leprechaun Software Developer

Репутация: 18
Всего: 534

Это версия Oracle для которой этот драйвер, если распаковать classes111.jar, classes12.jar и ojdbc14.jar то там везде будет одна и та же версия (у меня Oracle JDBC Driver version - 9.0.2.0.0). Может я не совсем корректно выразился, но меня интересовала строчка: Oracle JDBC driver classes for use with JDK14.

Репутация: 23
Всего: 44

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

[ Время генерации скрипта: 0.1336 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Мы используем Oracle в качестве базы данных для нашего веб-приложения. Приложение работает хорошо большую часть времени, но мы получаем эту ошибку "No more data to read from socket".

Мы используем spring, hibernate, и у меня есть следующее Для источника данных в моем файле контекста приложения.

Я не уверен, происходит ли это из-за ошибок приложений, ошибок базы данных или сетевых ошибок.

Мы видим следующее в журналах oracle

Oracle версия: 11.2.0.1.0

Я написал код для отправки/получения данных из клиентского сокета. Шаг отправки данных был выполнен успешно, но когда я хочу прочитать данные из сокета, метод readLine() блокирует программу, пока нет данных для чтения. Это мой код: StringBuffer document = new StringBuffer(); BufferedReader reader.

Для таких ошибок вам следует привлечь поддержку oracle. К сожалению, вы не упоминаете, какой выпуск oracle вы используете. Ошибка может быть связана с подглядыванием привязки оптимизатора. В зависимости от версии oracle применяются различные обходные пути.

У вас есть два способа решить эту проблему:

  • обновление до 11.2
  • установить параметр oracle _optim_peek_user_binds = false

Конечно, параметры подчеркивания должны быть установлены только по рекомендации службы поддержки oracle

Мы столкнулись с той же проблемой, но решили ее, увеличив размер пула соединений initialSize и maxActive .

Вы можете проверить эту ссылку

Может быть, это кому-то поможет.

Другой случай: если вы отправляете параметры даты параметризованному sql, убедитесь, что вы отправили java.sql.Timestamp , а не java.util.Date . В противном случае вы получите

java.sql.SQLRecoverableException : No more data to read from socket

The above was failing until we changed the date parameters to be java.sql.Timestamp

Я пытаюсь сбросить схему в oracle 11g в нашей среде разработки и получаю обратно ошибку SQL: больше нет данных для чтения из сокета . Там нет никакой нагрузки на схему, так как это просто dev db. Это небольшая база данных, в которой нет ничего сумасшедшего. Я вижу эту ошибку все время. Перезапуск.

Есть ли способ, с помощью которого я могу сделать функцию чтения сокета,поскольку не-Blocking.I имеет многопоточное серверное приложение, я хочу, чтобы моя функция accept() была блокирующей, но функция read() должна быть неблокирующей и возвращать EAGAIN, когда нет данных для чтения. Я попробовал.

Попробуйте две вещи:

  1. Установите значение $ORACLE_HOME/network/admin/tnsnames.ora на сервере oracle server = dedicated to server=shared, чтобы разрешить более одного соединения одновременно. Перезагрузка oracle.
  2. Если вы используете Java, это может вам помочь: в java/jdk1.6.0_31/jre/lib/security/Java.security измените securerandom.source=file:/dev/urandom на securerandom.source=file:///dev/urandom

Это очень низкоуровневое исключение, которое составляет ORA-17410.

Это может произойти по нескольким причинам:

Временная проблема с сетями.

Неправильная версия драйвера JDBC.

Некоторые проблемы со специальной структурой данных (на стороне базы данных).

Ошибка базы данных.

У меня была та же проблема. Я смог решить эту проблему со стороны приложения по следующему сценарию:

JDK8, spring framework 4.2.4.RELEASE, apache tomcat 7.0.63, Oracle Database 11g Enterprise Edition 11.2.0.4.0

Я использовал пул соединений с базой данных apache tomcat-jdbc :

В качестве эталона можно взять следующие параметры конфигурации:

Понижение JRE с 7 до 6 исправило эту проблему для меня.

Да, как сказал @ggkmath, иногда старый добрый перезапуск-это именно то, что вам нужно. Например, когда "contact the author and have him rewrite the app, meanwhile wait"-это не вариант.

Это происходит, когда приложение еще не написано (пока) таким образом, чтобы оно могло обрабатывать перезапуски базовой базы данных.

Казалось, я исправил свой экземпляр, удалив заполнитель параметра для параметризованного запроса.

По какой-то причине использование этих заполнителей работало нормально, а затем они перестали работать, и я получил error/bug.

В качестве обходного пути Я заменил литералы своими заполнителями, и это начало работать.

В нашем случае у нас был запрос, который загружает несколько элементов с select * from x where something in (. ) Частично это было так долго для бенчмарка теста. (17 Мб в виде текстового запроса). Запрос действителен, но текст такой длинный. Сокращение запроса решило проблему.

Я получил эту ошибку, а затем перезапустил свой сервер GlassFish, который содержал пулы соединений между моим клиентским приложением и базой данных, и ошибка исчезла. Поэтому попробуйте перезапустить сервер приложений, если это применимо.

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

Я хочу прочитать определенное количество байтов из сокета udp. В сокете tcp я могу использовать socket.read, где я могу указать объем данных для получения. Я не нахожу подобной функции для сокета.

Я сталкиваюсь с некоторой проблемой во время чтения данных из сокета, если в потоке сокета есть некоторые данные null, поэтому DataInputStream не будет читать полные данные, и поэтому на приемном.

Я хочу читать из сокета асинхронным способом. Если бы я использовал синхронный код ниже StreamReader aReadStream = new StreamReader(aStream); String aLine = aReadStream.ReadLine(); // application.

Я написал код для отправки/получения данных из клиентского сокета. Шаг отправки данных был выполнен успешно, но когда я хочу прочитать данные из сокета, метод readLine() блокирует программу, пока.

Я пытаюсь сбросить схему в oracle 11g в нашей среде разработки и получаю обратно ошибку SQL: больше нет данных для чтения из сокета . Там нет никакой нагрузки на схему, так как это просто dev db.

Есть ли способ, с помощью которого я могу сделать функцию чтения сокета,поскольку не-Blocking.I имеет многопоточное серверное приложение, я хочу, чтобы моя функция accept() была блокирующей, но.

Я написал две функции для преобразования типа данных в Oracle и вызвал их в операторе select на огромной таблице, подобной этой: SELECT safe_to_number(sid_day) sid_day, safe_to_number(albumid).

У меня есть следующий код для чтения входного потока из сокетного соединения: private ByteBuffer toByteBuffer(BufferedInputStream is) throws IOException < ByteArrayOutputStream buffer = new.

Я пытаюсь обойти сокеты в Android. Особенно я хочу знать, что лучше всего читать данные из сокета и представлять их UI. Насколько я понимаю, у нас не может быть вызова для чтения данных в основном.

Читайте также: