Oracle ORA-00600

У меня есть оператор SQL SELECT, который возвращает:

    Error: ORA-00600: internal error code, arguments: [qerpfAllocateR], [], [], [], [], [], [], []

Если я сузу свои результаты, добавив еще одно условие в предложении WHERE, все будет в порядке.

Кто-нибудь знает, что происходит?

РЕДАКТИРОВАТЬ:

    select * from ( select tbl1.col1, ..., tbl1.points
    from table1 tbl1, table2 tbl2
    where tbl1.tbl2FK = tbl2.PK and
          tbl2.col1 = someNumber and
          tbl1.dateColumn = to_date('27-10-2008','dd-mm-yyyy')
    order by tbl1.points desc ) s where rownum <= 3 

EDIT2:

Мой администратор БД предложил решение, которое работает:

select * from (select rank() over (order by tbl1.points desc) rank,
                  tbl1.col1, ..., tbl1.points
           from table1 tbl1, table2 tbl2
           where tbl1.tbl2FK = tbl2.PK and
                 tbl2.col1 = someNumber and
                 tbl1.dateColumn = to_date('27-10-2008','dd-mm-yyyy')) s
     where s.rank <= 3

10 ответов

Решение

Удачи в получении поддержки от Oracle...

Если серьезно, то каждый раз, когда я сталкиваюсь с этой проблемой, перестановка запроса немного помогает. Может быть, немного повозиться с индексами.

Ошибка ORA-0600 указывает на внутреннюю ошибку в самом Oracle. Скорее всего, вы попали в ошибку Oracle.

Наконец, вы выяснили, где находится узкое место? Простое объединение в три таблицы по несколько миллионов строк не займет много времени (я мог бы ожидать секунды или около того, просто просматривая таблицы и запросы), при условии правильной индексации таблиц. Но если вы перемещаете эти строки по медленной или уже привязанной сетевой карте, на сервер приложений с нехваткой памяти и т. Д., Медлительность может вообще не иметь никакого отношения к вашему запросу, а вместо этого к тому, что происходит после запроса. Семь миллионов строк - это довольно много данных для сборки и перемещения, независимо от того, сколько времени займет поиск этих строк. Попробуйте выбрать только одну строку, а не все семь миллионов, и посмотрите, как это выглядит в отличие. Если это быстро, то проблема не в запросе, а в наборе результатов.

Что такое полный запрос?

http://www.orafaq.com/wiki/ORA-00600 предлагает вам сообщить об ошибке оракулу.

ORA-00600 в основном означает, что вы сломали сервер оракула (не экземпляр, а сервер, обслуживающий ваш запрос).

Почти всегда в вашем bdump-файле будет находиться файл трассировки. Это, вероятно, не очень поможет вам, но будет очень полезно для поддержки оракула.

Обычно это вызвано ошибкой оракула, и из опыта вы ничего не можете с этим поделать, кроме как поднять SR через metalink (это рекомендуемое решение от Oracle). Они попытаются повторить проблему и, если повезет, в случае ошибки она в конечном итоге найдет свое место в патче.

Хотя в ближайшей перспективе (например, дни - месяцы) главное реальное решение - обойти это.

Хотя повышение СР на самом деле не очень помогает вам и может быть разочаровывающим опытом, его стоит сделать, так как это может сэкономить кому-то еще время после исправления ошибки.

Мое решение:

(просто верните SO-сообществу) У меня была проблема сегодня, и я не смог решить "запуск моего экземпляра", выполнив шаги, описанные выше, после нескольких часов осмотра я смог решить ее следующим образом.

проблема

В ЭТОЙ РАБОТЕ НЕ ОШИБАЛАСЬ [0600]

SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1904054272 bytes
Fixed Size                  2404024 bytes
Variable Size             570425672 bytes
Database Buffers         1325400064 bytes
Redo Buffers                5824512 bytes
Database mounted.
SQL> recover database
Media recovery complete.
SQL> alter database open
  2
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1],
[108], [615], [655], [], [], [], [], [], [], []`

ЗДЕСЬ МОЕ РЕШЕНИЕ ПРОБЛЕМЫ:

    SQL> Startup mount
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL> shutdown abort
ORACLE instance shut down.
SQL>
SQL> startup mount
ORACLE instance started.

Total System Global Area 1904054272 bytes
Fixed Size                  2404024 bytes
Variable Size             570425672 bytes
Database Buffers         1325400064 bytes
Redo Buffers                5824512 bytes
Database mounted.
SQL> Show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      C:\APP\USER\ORADATA\ORACLEDB\C
                                                 ONTROL01.CTL, C:\APP\USER\FAST
                                                 _RECOVERY_AREA\ORACLEDB\CONTRO
                                                 L02.CTL
SQL> select a.member,a.group#,b.status from v$logfile a ,v$log b where a.group#=
b.group# and b.status='CURRENT'
  2
SQL> select a.member,a.group#,b.status from v$logfile a ,v$log b where a.group#=
b.group# and b.status='CURRENT';

MEMBER
--------------------------------------------------------------------------------

    GROUP# STATUS
---------- ----------------
C:\APP\USER\ORADATA\ORACLEDB\REDO03.LOG
         3 CURRENT


SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1904054272 bytes
Fixed Size                  2404024 bytes
Variable Size             570425672 bytes
Database Buffers         1325400064 bytes
Redo Buffers                5824512 bytes
Database mounted.
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 4234808 generated at 01/21/2014 18:31:05 needed for thread 1
ORA-00289: suggestion :
C:\APP\USER\FAST_RECOVERY_AREA\ORACLEDB\ARCHIVELOG\2014_01_22\O1_MF_1_108_%U_.AR

C
ORA-00280: change 4234808 for thread 1 is in sequence #108


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
C:\APP\USER\ORADATA\ORACLEDB\REDO03.LOG
Log applied.
Media recovery complete.
SQL> alter database open resetlogs;

Database altered.

НАКОНЕЦ РАБОТАЛ:

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

ORA-00600 обычно означает, что есть что-то очень неожиданное, и это может быть связано с повреждением базы данных. Симптомы могут заключаться в том, что запрос работает или нет в зависимости от того, как он сформулирован.

Пример из жизни:

  • Не удалось обновить поле большого объекта для конкретной строки с id=
  • Строка не отображается с помощью SELECT * FROM
  • Но: SELECT * FROM
  • WHERE id= не выполняется и выдает ORA-006000.

    (Возможно) решение, использованное в приведенном выше примере

    • экспортировать все доступное содержимое таблицы
    • удалить таблицу
    • повторно импортировать содержимое

    Удачи!

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

    Я столкнулся с этим в ситуации с типом записи, включающим USER_TAB_COLS. Я использовал VARCHAR2(128) для поля записи, которое должно было содержать USER_TAB_COLS.DATA_DEFAULT. Ну, по какой-то причине это ДОЛГО, и хотя это сопоставление работало нормально, когда я запускал код в командном окне (PL/SQL Developer), оно не удавалось, когда я встраивал то же самое в зонтичный скрипт, который выполнял всевозможные задачи. . Как только я правильно установил тип данных записи для использования привязанного типа (USER_TAB_COLS.DATA_DEFAULT%TYPE) вместо VARCHAR2(128), sp, выполняющий эту работу, запускается в любом контексте. Меня поразил тот факт, что он работал «автономно», но не при вызове из другого сценария.
    Вот тип записи, который я использовал:

    где вы можете видеть, что определение поля DEF_VALUE теперь является привязанным типом.

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

    Что-то здесь по поводу аналогичной проблемы - ваш выбор использует объединения?

    Другие вопросы по тегам