6

出于测试目的,我需要几个 SQL 脚本,它们会ORA-00600在 Oracle 版本 11.1.0.7 中导致错误。

数据库不是空的,它充满了全新安装的 Vision Demo E-Business Suite 的数据。

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

我真正需要的是 4-5 种不同的方法来导致ORA-00600错误。

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

4

3 回答 3

5

您不能“自然地”导致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
于 2014-02-03T08:32:17.120 回答
3

按照这里

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

  • 超时,
  • 文件损坏,
  • 内存、硬件、内存或 I/O 消息中的数据检查失败,
  • 错误恢复的文件
  • SELECT FROM DUALOracle Forms 中的 PL/SQL 语句(您必须改为使用!SELECT FROM SYS.DUAL

所以,为了产生这些错误,你可能需要对你的数据库造成一些严重的损害,我不建议这样做。上面的最后一个要点可能是一种方法,所以我先测试一下。

于 2014-02-03T08:30:51.063 回答
1

也许我们可以一起为你找到好的例子......

只是为了开始一个集合:

№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
于 2014-02-06T22:34:35.710 回答