Sql 在Oracle中故意导致ORA-00600异常

Sql 在Oracle中故意导致ORA-00600异常,sql,oracle,plsql,ora-00600,Sql,Oracle,Plsql,Ora 00600,出于测试目的,我需要两个SQL脚本,它们将导致Oracle 11.1.0.7版中出现ORA-00600错误 数据库不是空的,它充满了新安装的Vision Demo电子商务套件的数据 该系统是学习Oracle的学生的培训基地。这将用于培养他们的故障排除技能。 为什么是SQL?因为这个脚本的复制应该是自动化的。我们将随机化问题的发生,创建一个真正的窃听系统模型,以掌握故障排除活动 我真正需要的是4-5种不同的方式来引起ORA-00600错误 注意:这个问题不是关于解释什么是ORA-600错误,或者如

出于测试目的,我需要两个SQL脚本,它们将导致Oracle 11.1.0.7版中出现
ORA-00600
错误

数据库不是空的,它充满了新安装的Vision Demo电子商务套件的数据

该系统是学习Oracle的学生的培训基地。这将用于培养他们的故障排除技能。 为什么是SQL?因为这个脚本的复制应该是自动化的。我们将随机化问题的发生,创建一个真正的窃听系统模型,以掌握故障排除活动

我真正需要的是4-5种不同的方式来引起
ORA-00600
错误

注意:这个问题不是关于解释什么是ORA-600错误,或者如何排除错误。此问题是关于故意导致ORA-600错误。

根据:

ORA-600是由Oracle RDBMS软件的通用内核代码生成的内部错误。它在许多方面与其他Oracle错误不同。可能的原因包括:

  • 暂停
  • 档案腐败
  • 内存、硬件、内存或I/O消息中的数据检查失败
  • 错误还原的文件
  • Oracle表单中PL/SQL中的
    SELECT FROM DUAL
    语句(您必须改用
    SELECT FROM SYS.DUAL
所以,为了生成这些错误,您可能需要对数据库造成严重的破坏,我不建议这样做。上面的最后一点可能是一种方法,所以我会先测试一下。

你不能导致“自然”;这是一个涵盖Oracle内部异常的通用异常。因此,除非您知道导致这种情况的Oracle bug,或者您想故意损坏您的数据库,否则您就没有机会了

你能做的就是你自己,你可以模仿这个例外:

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

也许我们能为你找到好的例子

只需开始收集:

№1(已找到)

№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

ORA-00600
可能意味着您偶然发现了Oracle错误。没错,我想找到一些简单的方法来随意复制它。根据orafaq.com上的信息,以下是导致ORA-00600的可能原因:1。暂停,2。文件损坏,3。内存、硬件、内存或I/O消息中的数据检查失败,4。错误还原的文件,5。Oracle表单中PL/SQL中的SELECT FROM DUAL语句(必须改用SELECT FROM SYS.DUAL!)。所以这里有一系列的事情要尝试。祝你好运!大多数此类错误取决于具体的非常特殊的条件,如操作系统、安装的修补程序、DB引擎更新历史记录、数据大小、数据库服务配置等。因此,从我的观点来看,学习一些通用的、真正有用的东西并不是一个好主意。无论如何,在大多数情况下,教育数据库必须满足所有发现的bug重现此类错误的条件。从另一个角度来看,学生们更感兴趣的任务是如何通过修改DB文件来引入ORA-600。例如,通过查询特定记录修改文件存储以导致ORA-600…:)好主意。但不幸的是,这不是我需要的。我想我得纠正一下这个问题。我知道这不是你所需要的@user3265017;你提到SQL,我告诉你如何在SQL中实现它。。。损坏您的数据库或发现导致此问题的Oracle错误(或将其转换为函数)。无论如何,感谢您的帮助。我目前正在寻找一个适合我要求的bug。我明白你的意思,谢谢。我将用一些澄清来更新我的问题。我的数据库是学生的培训基地,因此,数据安全不是我们应该担心的事情。如果不使用metalink,就做得很好!问题是你没有在SQL中得到ORA-00600。。。
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