Преднамеренная причина исключения 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