Нет данных для чтения из оракула сокета

Обновлено: 03.07.2024

больше нет данных для чтения из сокета oracle 12c sql developer (6)

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

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

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

В логах оракула мы видим следующее

Версия Oracle: 11.2.0.1.0

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

java.sql.SQLRecoverableException: больше нет данных для чтения из сокета

Вышеописанное не работало, пока мы не изменили параметры даты на java.sql.Timestamp

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

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

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

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:

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

Этой конфигурации было достаточно, чтобы исправить ошибку. Это отлично работает для меня в сценарии, упомянутом выше.

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

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

У меня возникла ошибка "ORA-17410: больше нет данных для чтения из сокета" в базе данных Oracle.

ORA-17410: больше нет данных для чтения из сокета

Подробности ошибки следующие.

Нет больше данных для чтения из сокета

Эта ошибка ORA-17410 связана с ошибкой, проблемами с программным обеспечением клиента Oracle или проблемами с сетью и брандмауэром.

Чтобы устранить эту ошибку, проверьте и устраните проблему с сетью и брандмауэром.

Откройте файл tnsnames.ora ( $ORACLE_HOME/network/admin ) и измените «(SERVER = DEDICATED)» на «(SERVER = SHARED)», затем перезапустите базу данных и прослушиватель и повторите попытку.

Если вы используете Oracle 11gR1, выполните следующую команду alter.

Если вы хотите изучить Oracle Database для начинающих, прочитайте следующие статьи.

937 просмотров в прошлом месяце, 3 просмотра сегодня

О Мехмете Салихе Деведжи


Я являюсь основателем SysDBASoft IT and IT Tutorial и сертифицированным экспертом по базам данных Oracle и SQL Server, Goldengate, Exadata Machine, администратором Oracle Database Appliance с более чем 10-летним опытом работы. У меня есть сертификаты экспертов OCA, OCP, OCE RAC. Я работал. Более 100 банковских, страховых, финансовых, телекоммуникационных и т. д. клиентов в качестве консультанта, Insource или Outsource. Я выполнил более 200 операций в этих клиентах, таких как установка Exadata, PoC, миграция и обновление, обновление базы данных Oracle и SQL Server, Oracle RAC Установка, установка SQL Server AlwaysOn, миграция базы данных, аварийное восстановление, восстановление резервной копии, настройка производительности, периодические проверки работоспособности. Я выполнил более 2000 репликаций таблиц с помощью Goldengate или инструмента репликации SQL Server для баз данных DWH во многих клиентах. Если вам нужен Oracle DBA, SQL Администратор баз данных серверов, администратор баз данных приложений, Exadata, Goldengate, консультации и обучение EBS, вы можете отправить мой адрес электронной почты [email protected] .- - Oracle DBA, администратор баз данных SQL Server, администратор баз данных приложений, Exadata, Goldengate, EBS и linux Danışmanl ık ve Eğitim için [email protected] a mail atabilirsiniz.

Вопрос. Что делать, если я получаю сообщение "Нет больше данных для чтения из сокета"?

SQLException: больше нет данных для чтения из сокета
SQLRecoverableException: больше нет данных для чтения из сокета

В журнале предупреждений отображается эта ошибка:

ORA-28547: ошибка подключения к серверу, возможная ошибка администратора Oracle Net

Ответ: Эта ошибка указывает на прерывание процесса, и первым шагом в устранении этой ошибки является просмотр журнала предупреждений и поиск файла трассировки. «Нет больше данных для чтения из сокета» не является ошибкой JDBC или Oracle. Скорее, это общая ошибка связи, часто возникающая в результате проблемы с подключением TNS.

Ошибка «больше нет данных для чтения из сокета» чаще всего возникает из-за ошибки Oracle (в версии 11g), и мы рекомендуем перейти на последнюю версию Oracle.

Обучение Oracle от Дона Берлесона

Лучшие на сайте «Учебные курсы Oracle» находятся на расстоянии одного телефонного звонка! Вы можете пройти индивидуальное обучение Oracle от Дональда Берлесона прямо в своем магазине!

Консультации и обучение Oracle

Бурлесон — американская команда


Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Несколько раз я получаю сообщение об ошибке Нет больше данных для чтения из сокета,
когда мы делаем включение или отключение индекса в секционированной таблице LIST.
Чтобы включить или отключить индекс, у нас есть процедура PROC_INDEX_ENABLE_DISABLE.

Ситуация, с которой нам нужно справиться, приведена ниже.

1: Все таблицы разделены СПИСКОМ по столбцам BRANCH, таким как ABC, XYZ, 1BB,
(значение ветви также может начинаться с номера).
В идеале мы будем использовать то же имя и для имени раздела.
Мы, Oracle, не позволяем нам создавать объекты, начинающиеся с номера,
мы создали другое имя раздела, когда он содержит значение, начинающееся с номера.

2: Несколько ветвей могут принадлежать одному идентификатору группы. Если мы передаем идентификатор группы, все ветки под
одним и тем же идентификатором группы должны включать/отключать соответствующие разделы, связанные с ветвями

Если я работаю индивидуально, все работает нормально. Но это включение/включение вызывается в процедуре множественных
с разными таблицами, разными идентификаторами групп.

иногда я получаю внутреннюю ошибку Oracle

IMO, существует ошибка в коде драйвера Java, а НЕ в процедуре PL/SQL.
Я считаю, что Oracle является жертвой, а не виновником.

Ваши комментарии и ответы приветствуются.

Действительно, этот форум очень полезен для изучения многих концепций и решения моих проблем.
Искренне следую всем предложениям форума. Я всегда очень благодарен этому форуму.

В блоке WHEN OTHERS THEN есть еще один вызов процедуры, который вставит все сообщения об ошибках в таблицу журнала исключений. Когда возвращаемое значение процедуры равно -1, мы будем рассматривать это как случай сбоя и узнаем об исключениях в таблице журнала.

У нас есть сценарий оболочки, который вызывает приложение JAVA, из которого он вызывает процедуру ORACLE,
в зависимости от значения, возвращаемого процедурой, мы делаем выполнение процедуры успешным или неудачным.
В случае сбоя мы также обновим соответствующее сообщение об ошибке. Мы получили это сообщение об ошибке отсюда.

Ранее эта процедура работала нормально. В то время все таблицы являются неразделенными.
Недавно мы преобразовали эту таблицу в LIST Partitioning, чтобы обеспечить поддержку нескольких ветвей.

Следующее является основным изменением, которое мы внедрили в эту версию:

1:XMLTABLE
2:BULK COLLECT
3:COLLECTION (переменная TYPE с одним параметром)

Таким образом, все подозревают, что что-то из вышеперечисленного вызывает ошибку

Действительно, этот форум очень полезен для изучения многих концепций и решения моих проблем.
Искренне следую всем предложениям форума. Я всегда очень благодарен этому форуму.

В блоке WHEN OTHERS THEN есть еще один вызов процедуры, который вставит все сообщения об ошибках в таблицу журнала исключений. Когда возвращаемое значение процедуры равно -1, мы будем рассматривать это как случай сбоя и узнаем об исключениях в таблице журнала.

Вы проигнорировали мой вопрос о том, как процедура может напрямую возвращать vStatus, не равный -1.
Из вашего ответа я подразумеваю, что опубликованный код не является правдой, всей правдой и ничего, кроме правды.
Размещенный код представляет собой модифицированную и запутанную версию кода.
Я прав?

Пожалуйста, опубликуйте URL из документации Oracle, где код ошибки = 17410.

>Таким образом, каждый подозревает, что что-то из вышеперечисленного вызывает ошибку
Вы имеете право на свое мнение, несмотря на полное отсутствие доказательств того, что вышеизложенное может быть правдой.

Подтвердите, что код Java также был изменен, чтобы соответствовать изменениям в базовой структуре таблицы.

Я изменил все имена объектов и удалил зависимые от них некоторые другие процедуры.
По ошибке также удалена следующая строка в конце перед исключением.

Еще одно изменение, касающееся обновления версии JAVA Is с 1.6 до 1.8.
эту ошибку мы получаем, когда вызываем эту процедуру через сценарий оболочки и приложение java.
Если я запускаю SQL Developer, все работает нормально.

Вы сами по себе (YOYO)!


эту ошибку мы получаем, когда вызываем эту процедуру через сценарий оболочки и приложение java.
Если я запускаю SQL Developer, все работает нормально.

Пожалуйста, опубликуйте простой воспроизводимый тестовый пример, который выдает ошибку 17410; так что мы можем видеть то же самое, что и ваш отчет.

Как вы сказали, я не могу воспроизвести проблему с SQL Developer. Даже через Linux она не возникает каждый раз. Иногда мы сталкиваемся с этой проблемой. Не знаю, когда она работает нормально, а когда нет. делает исключение

Как вы и предложили, мы попросили команду Java провести расследование и с их стороны.

Большое спасибо за ваш интерес к решению проблемы.

Как вы сказали, я не могу воспроизвести проблему с SQL Developer. Даже через Linux она не возникает каждый раз. Иногда мы сталкиваемся с этой проблемой. Не знаю, когда она работает нормально, а когда нет. делает исключение

Как вы и предложили, мы попросили команду Java провести расследование и с их стороны.

Большое спасибо за ваш интерес к решению проблемы.

Если вы не знаете, как (вос)создать ошибку, то как вы собираетесь исправить ошибку, чтобы ошибка больше не возникала?

Опять же, я спрашиваю, где ошибка 17410 задокументирована Oracle? Пожалуйста, отправьте URL туда же.

Выполняет ли код Java команду SELECT непосредственно для базы данных Oracle (не через вызов процедуры PL/SQL?

Он все еще существует. Поскольку эта проблема возникла после замены существующей процедуры на мой новый код, я пытаюсь переписать логику разными способами, чтобы добиться того же. В то же время ресурс Java также работает из с их стороны также есть способ исправить это с помощью драйвера JDBC.

Благодарим за проявленный интерес к решению проблемы.

Он все еще существует. Поскольку эта проблема возникла после замены существующей процедуры на мой новый код, я пытаюсь переписать логику разными способами, чтобы добиться того же. В то же время ресурс Java также работает из с их стороны также есть способ исправить это с помощью драйвера JDBC.

Благодарим за проявленный интерес к решению проблемы.

ВСЕ, что я прочитал и знаю, приводит меня к выводу, что ORA-17410 может быть вызван ТОЛЬКО кодом JAVA, который обращается к Oracle DB через JDBC.

Пожалуйста, докажите, что я ошибаюсь, если можете, воспроизводимым тестовым примером.


После внесения некоторых изменений в мою процедуру мы можем решить эту ошибку 17410-Нет больше данных для чтения из сокета.

Ниже приведены изменения, которые мы внедрили

1: Удаление BULK COLLECT из подпроцедуры SP_SUBPARTITION_IDXS_ENABLE.
Мы используем цикл CURSOR For для повторения результирующего набора. Но снова назначение того же результирующего набора
коллекции, доступной с помощью BULK COLLECT (который уже находится в цикле).

Только что удалил BULK COLLECT INTO tPartitioned, tIndex_Name
из следующего блока.

Мы знаем, что с этой проблемой мы сталкиваемся, когда выполняем эту процедуру из Java, и она отлично работает из клиента oracle или инструмента SQL Developer, но, наконец, эту процедуру нужно выполнять из пользовательского интерфейса или заданий, где
JAVA вызов обязателен.
Так убрали лишний код из процедуры и смогли решить проблему

Технические статьи Oracle Database и технологии геопространственных данных

Цель этого блога — рассказать о проблеме, возникшей в производственной среде. настоятельно рекомендуется, когда вы сталкиваетесь с ошибкой ORA-7445, связаться со службой поддержки Oracle и открыть с ними дело.

Итак, моя цель — помочь здесь….

с какими симптомами столкнулись?

Версия базы данных: 12cR1 (12.1.0.2.181016)

Файл журнала предупреждений базы данных содержит следующие ошибки:

Исключение [тип: SIGSEGV, адрес не сопоставлен с объектом] [ADDR:0x7440038090] [PC:0x7FEA4DB100D4, java_nio_Bits__byteOrder()+204] [флаги: 0x0, количество: 1]

DDE: Проблемный ключ «ORA 7445 [java_nio_Bits__byteOrder]» полностью контролируется лавинной рассылкой (0x6). Дальнейшие сообщения для этого проблемного ключа будут подавляться на срок до 10 минут

При выполнении сценариев SQL с использованием sqlplus….например, utlrp.sql возникали следующие ошибки:

SQL> @/rdbms/admin/utlrp.sql
ОШИБКА в строке 1:
ORA-03 11 3: конец файла в канале связи

Идентификатор процесса: 105404
Идентификатор сеанса: 2878 Серийный номер: 20833

Ошибки, полученные со стороны приложения, развернутого в weblogic:

Нет больше данных для чтения из сокета

Причиной таких симптомов является повреждение JVM!

Чтобы решить эту проблему:

  1. Проверьте состояние JVM, выполнив следующий скрипт:

spool jvm_info.log
—— ИНФОРМАЦИЯ О РЕГИСТРЕ ——
SELECT SUBSTR(comp_name, 1, 30) comp_name, SUBSTR(version, 1, 20) version, status
FROM dba_registry < br />ЗАКАЗ ПО comp_name;
—— ИСТОРИЯ РЕГИСТРА ——-
SELECT TO_CHAR(action_time, 'DD-MON-YYYY HH24:MI:SS') act_time, action, version, id, comments
FROM dba_registry_history
/>ЗАКАЗАТЬ ПО DESC_time_time;

—— ИНФОРМАЦИЯ ОБ ОБЪЕКТЕ JAVA ——
— Имеется ли значительное количество ДЕЙСТВИТЕЛЬНЫХ объектов Java в SYS?
ВЫБРАТЬ владельца, тип_объекта, статус, COUNT(*)
ОТ dba_objects
ГДЕ тип_объекта КАК '%JAVA%'
ГРУППИРОВАТЬ ПО владельцу, тип_объекта, статус
ЗАКАЗАТЬ ПО владелец, object_type, статус;
— Является ли пакет DBMS_JAVA ДЕЙСТВИТЕЛЬНЫМ?
ВЫБЕРИТЕ владельца, имя_объекта, тип_объекта, статус
ОТ dba_objects
ГДЕ имя_объекта КАК 'DBMS_JAVA%'
ИЛИ имя_объекта КАК '%INITJVMAUX%'
ЗАКАЗАТЬ ПО владельцу, имя_объекта , тип_объекта;
— Есть ли в SYS какие-либо НЕДЕЙСТВИТЕЛЬНЫЕ объекты Java?
SELECT owner, NVL(longdbcs,object_name) long_name, object_type, status
FROM dba_objects, sys.javasnm$
WHERE object_type LIKE '%JAVA%'
AND status <> ' ДЕЙСТВИТЕЛЬНО'
И короткое (+) = имя_объекта
ЗАКАЗАТЬ ПО владельцу, длинному_имени, типу_объекта;
—— ИНФОРМАЦИЯ О РОЛЯХ JAVA ——
— Ожидаемое количество зависит от версии.
ВЫБЕРИТЕ роль
ИЗ dba_roles
ГДЕ роль НРАВИТСЯ ‘%JAVA%’
ЗАКАЗАТЬ ПО роли;
—— ИНФОРМАЦИЯ О ПАМЯТИ ——
ВЫБРАТЬ *
FROM v$sgastat
ГДЕ pool = 'java pool' ИЛИ ​​name = 'free memory'
ORDER BY pool, имя;
—— ИНФОРМАЦИЯ О ПАРАМЕТРАХ БАЗЫ ДАННЫХ ——
показать параметр pool_size
показать параметр target
показать параметр sga
—— ПРОВЕРИТЬ ИСПОЛЬЗОВАНИЕ JAVAVM (и вернуть версию JDK, если> 11g ) ——
— Вызов подпрограмм в DBMS_JAVA приведет к вызову JavaVM и выявит определенные проблемы.
SET SERVEROUTPUT ON
DECLARE
ver NUMBER := 0;
val VARCHAR2(30);
НАЧАЛО
НАЧАЛО
ВЫБЕРИТЕ TO_NUMBER( SUBSTR(версия, 1, 2))
INTO ver
FROM dba_registry
ГДЕ comp_name = 'JServer JAVA Virtual Machine ';
ИСКЛЮЧЕНИЕ
КОГДА ДРУГИЕ ТОГДА НУЛЕВЫЕ;
КОНЕЦ;
IF ver >= 12 THEN
EXECUTE IMMEDIATE
‘SELECT ”JDK version is” ||
dbms_java.get_jdk_version() FROM dual’
INTO val;
ELSE
val := dbms_java.longname('Версия JDK недоступна');
КОНЕЦ ЕСЛИ;
dbms_output.put_line(val);
КОНЕЦ;
/

**** Запишите текущее значение параметров JAVA_JIT_ENABLED и JOB_QUEUE_PROCESSES

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