Оператор Update приводит к тому, что Oracle «Нет больше данных для чтения из сокета»? - PullRequest
2 голосов
/ 29 марта 2011

У меня есть несколько простых UPDATE...WHERE EXISTS... к столу. Oracle (через все другие клиентские инструменты), однако, немедленно (без задержки) возвращает ORA-03113, который указывает на возможные проблемы с подключением, и Я запускаю это прямо в окне базы данных.

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

Что бы это могло быть? Как узнать?

$ sqlplus user/pass    
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Mar 28 13:04:38 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from dual;

D
-
X

SQL>       update foo_a a
  2        set a.field0 = (
  3          select b.bar
  4          from foo_b b
  5          where b.custom_no = 0
  6            and b.csf_id = a.id
  7        ) , a.updated_on = current_timestamp
  9        where exists (
  8          select 1
 10          from foo_b c
 11          where c.custom_no = 0
 12            and c.csf_id = a.id
 13        );
    update foo_a a
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel


SQL>

Ответы [ 3 ]

3 голосов
/ 29 марта 2011

Базы данных Oracle очень редко действительно сбой. Сеанс может быть прерван или отключен, но база данных остается в рабочем состоянии.

Это признак ошибки Oracle при обработке запроса. Обычно ошибочный запрос можно найти в файле трассировки. Иногда в журнале оповещений также есть полезное сообщение и дополнительный код ошибки. Если вы нашли запрос в файле трассировки, иногда вы можете найти ошибку в Metalink. В файле трассировки вы можете найти строку вроде:

ksedmp: internal or fatal error

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

Можете ли вы переписать свое заявление об обновлении? Это тестовая среда? Можете ли вы исключить ГДЕ СУЩЕСТВУЮЩИЙ и заменить его простым выражением, чтобы посмотреть, является ли это источником проблемы?

2 голосов
/ 29 марта 2011

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

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

1 голос
/ 29 марта 2011

ORA-03113 = обратитесь в службу поддержки

Первый вопрос, который они зададут: вы полностью исправлены?

...