【问题标题】:Oracle ORA-00600甲骨文 ORA-00600
【发布时间】:2010-10-05 10:07:11
【问题描述】:

我有返回的 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 

编辑2:

我的数据库管理员建议了可行的解决方案:

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

【问题讨论】:

标签: sql oracle plsql ora-00600


【解决方案1】:

ORA-0600 错误表示 Oracle 本身存在内部错误。您很可能遇到了 Oracle 错误。

如果您访问http://metalink.oracle.com,您可以通过将“参数”和完整堆栈跟踪粘贴到 ORA-0600 查找工具中来查找确切的错误(如果已知)。参见 metalink 注释 153788.1。

如果该描述存在已知错误,则很可能已有补丁可供您下载和安装。如果不是已知错误,请联系支持人员。

【讨论】:

    【解决方案2】:

    什么是完整的查询?

    http://www.orafaq.com/wiki/ORA-00600 建议您将错误报告给 oracle。

    【讨论】:

      【解决方案3】:

      祝你好运获得 Oracle 的支持...

      说真的,每次我遇到这个问题时,稍微重新安排一下查询通常会有所帮助。也许有点摆弄索引。

      【讨论】:

      • 换句话说:“我不知道。这很神奇。试着用另一个方向摇动巫毒棒。”重新排列查询会有所帮助,直到您再次遇到相同的问题。它是由 Oracle 中的错误引起的,并且可能已经修复了它。如果没有,您应该提交错误报告。
      • @Apocalisp:首先,我怀疑是否有修复——可能有一个。等待错误修复可能需要很长时间,如果您不想无限延迟您的项目,您需要想出一个解决方法。换句话说:“他现在需要一个解决方案,而不是 6 周后”
      • 顺便说一下,这正是本例中发生的情况 - 没有修复,DBA 建议了一个解决方法,并且成功了 - 每个人都很高兴,项目没有延迟,希望 Oracle 会发布在某个时候打补丁。
      • 我前段时间遇到了这个问题,发现几个 OTN/Oracle 论坛讨论也将此归因于内部 Oracle 错误。我目前无法找到它们,否则我会提供链接。它仅在执行某些类型的嵌套选择时出现(不确定究竟是什么属性导致了这种情况)。有时查询会起作用,有时则不会……也许它与索引有关。尽管令人沮丧,但我会选择可行的方法,而不是尝试获取补丁。我很确定它有一个 Oracle SR/TAR,但不确定它是否已在新 v 中修复。
      【解决方案4】:

      ORA-00600 基本上意味着您已经使 oracle 服务器崩溃(不是实例,只是为您的请求提供服务的服务器)。

      在您的 bdump 位置几乎总会有一个跟踪文件。这可能不会对您有太大帮助,但对 oracle 支持非常有帮助。

      这通常是由 oracle 错误引起的,根据经验,除了通过 metalink 提出 SR(这是 Oracle 推荐的解决方案)之外,您无能为力。他们会尝试复制问题,如果运气好的话,它最终会找到补丁的方式。

      但在短期内(例如,几天 - 几个月),主要的现实解决方案是解决它。

      虽然提高 SR 并不能真正帮到您,而且可能会带来令人沮丧的体验,但值得这样做,因为一旦修复了错误,它可能会为其他人节省时间。

      【讨论】:

        【解决方案5】:

        这些错误通常与优化器有关。我认为即使是查询中的最小更改(例如在 FROM 子句中切换 table1 和 table2 的顺序)也可能会迫使优化器选择不会遇到此错误的不同计划。

        【讨论】:

          【解决方案6】:

          我的解决方案:

          问题

          这个 DIDNT 工作出现错误 [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.
          

          终于成功了:

          【讨论】:

            【解决方案7】:

            ORA-00600 通常意味着有一些非常意外的东西,它可能与数据库损坏有关。症状可能是查询是否有效,具体取决于它的制定方式。

            生活例子:

            • 对于 id=
            • 的特定行,LOB 字段更新出错
            • 使用 SELECT * FROM 看不到该行
            • 但是:SELECT * FROM
            • WHERE id= 执行失败并给出 ORA-006000。

              (可能的)用于上述示例的解决方案

              • 导出所有可访问的表格内容
              • 删除表
              • 重新导入内容

              祝你好运!

              【讨论】:

              【解决方案8】:

              当表中有 XMLTYPE 列时,我使用 PL/SQL Developer 看到过这样的错误。如果我让 PL/SQL Developer 为我创建查询框架就不会发生这种情况,因为它会为 XMLTYPE 列请求添加一些语法,我不记得具体是什么了。

              【讨论】:

              • 这里不涉及 XMLTYPE。我在各种不同的情况下都看到过 ORA-00600 - 这是一个通用的“包罗万象”错误,所以它不会是相同的错误,除非参数相同并且您使用相同的数据库版本/补丁.
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-06
              相关资源
              最近更新 更多