Преднамеренная причина исключения ORA-00600 в Oracle

Для целей тестирования мне нужна пара сценариев SQL, которые приведут к ORA-00600 ошибка в Oracle, версия 11.1.0.7.

База данных не пуста, она заполнена данными новой установки Vision Demo E-Business Suite.

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

Что именно мне нужно, так это 4-5 разных способов вызвать ORA-00600 ошибка.

Примечание. Этот вопрос не о том, чтобы объяснить, что такое ошибка ORA-600, или как их устранить. Этот вопрос о намеренном возникновении ошибки ORA-600.

3 ответа

Вы не можете вызвать ORA-00600 "естественно"; это общее исключение, которое охватывает внутренние исключения Oracle. Так что, если вы не знаете об ошибке Oracle, которая вызывает это, или хотите намеренно испортить вашу базу данных, у вас нет шансов.

Что вы можете сделать, это самостоятельно вызвать ошибку приложения, которая может имитировать это исключение:

declare
   internal_exception EXCEPTION;
   PRAGMA EXCEPTION_INIT( internal_exception, -600 );
begin
  raise internal_exception;
end;
/
declare
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [], [], [], [], [], [], [], [], [], [], [], []
ORA-06512: at line 5

Если вам нужно сделать это из SQL, вы можете преобразовать вышеперечисленное в функцию:

create or replace function raise_600 return number is
   internal_exception EXCEPTION;
   PRAGMA EXCEPTION_INIT( internal_exception, -600 );
begin
  raise internal_exception;
  return 1;
end;

Тогда просто назовите это:

select raise_600 from dual

Согласно здесь:

ORA-600 - это внутренняя ошибка, генерируемая общим кодом ядра программного обеспечения СУБД Oracle. Он отличается от других ошибок Oracle во многих отношениях. Возможные причины включают в себя:

  • тайм-аут,
  • повреждение файла,
  • неудачные проверки данных в памяти, оборудовании, памяти или сообщениях ввода-вывода,
  • неправильно восстановленные файлы
  • SELECT FROM DUAL оператор в PL/SQL в Oracle Forms (вы должны использовать SELECT FROM SYS.DUAL вместо!)

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

Может быть, все вместе, мы можем найти хорошие примеры для вас...

Просто, чтобы начать коллекцию:

№1 (находится здесь)

create table t(a clob);

insert into t values(utl_raw.cast_to_varchar2('EC'));

№2 Не вернул ORA-600 клиенту, просто разрывает соединение. Но эта ошибка может быть найдена в журналах сервера. Этот случай должен быть проверен, потому что в данный момент у меня нет доступа к тестовой среде. Пожалуйста, добавьте комментарий, чтобы указать, если такие случаи интересны.

create table t1(id number);
create table t2(id number);

insert into t1(id) values(1);
insert into t1(id) values(2);
insert into t2(id) values(1);
insert into t2(id) values(2);

select 
  ta.id
from 
  t1 ta
  join (
    select id 
    from t2 
    start with id = 1 connect by prior id + 1= id 
  ) tb 
    on prior ta.id = tb.id
start with 
  ta.id = 2
connect by 
  prior ta.id - 1 = ta.id
Другие вопросы по тегам