Данные для считывания из сокета отсутствуют 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
Попробуйте две вещи:
- Установите в $ Oracle_HOME/network/admin/tnsnames.ora на сервере Oracle сервер = выделенный для сервера = общий, чтобы разрешить более одного подключения одновременно. Перезагрузите Oracle.
- Если вы используете 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
Репутация: 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, когда нет данных для чтения. Я попробовал.
Попробуйте две вещи:
- Установите значение $ORACLE_HOME/network/admin/tnsnames.ora на сервере oracle server = dedicated to server=shared, чтобы разрешить более одного соединения одновременно. Перезагрузка oracle.
- Если вы используете 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. Насколько я понимаю, у нас не может быть вызова для чтения данных в основном.
Читайте также: