选择语句在 Oracle 11 上给出 ora-03113

Posted

技术标签:

【中文标题】选择语句在 Oracle 11 上给出 ora-03113【英文标题】:select statement give ora-03113 on Oracle 11 【发布时间】:2011-03-20 09:54:21 【问题描述】:

当我在 Oracle 11g 上运行下一条 sql 语句时,我得到了 ora - 03113 但同样的语句在 oracle 10gr2 上运行正常 任何人都可以在这个问题上帮助我

    SELECT /*+ INDEX_JOIN(b) */
           b.child_
      FROM tab1 b
START WITH b.child_ IN (
     SELECT /*+ INDEX_JOIN(c) */
            c.id
       FROM tab2 c
      WHERE c.id IN (SELECT /*+ INDEX_JOIN(d) */
                            d.id
                       FROM tab3 d
                      WHERE d.id2 = 'X'
                     UNION
                     SELECT 'X'
                       FROM DUAL))
CONNECT BY b.parent_ = PRIOR b.child_

【问题讨论】:

对于我们这些不知道 Oracle 错误代码的人来说,ORA-03113 是“通信通道上的文件结尾”(ora-03113.ora-code.com)。 到目前为止你尝试过什么?例如删除提示,将 UNION 更改为 UNION ALL? 【参考方案1】:

ORA-03113 是 Oracle 的一般“服务器故障”错误之一。 USER_DUMP_DEST 目录中应该有一个包含诊断信息的跟踪文件。如果你不走运,将会有一个核心转储(在CORE_DUMP_DEST 目录中)。我说不走运是因为从核心转储中获取堆栈跟踪更加困难。

您很可能需要 DBA 来帮助访问这些文件并进行解释。

ORA-03113 通常表示数据库的完整性存在问题,例如块或索引损坏。因此,您可能还需要 DBA 的帮助来解决此问题。

简而言之,我认为投票支持从 ServerFault 迁移它的人这样做是错误的。

【讨论】:

我知道 ORA-03113 来自 Oracle 中的错误,因此 OP 的问题可能不是数据文件损坏。在这种情况下,解决方案是重写查询。导致此错误的查询通常具有子查询,因此可以尝试使用更少的子查询重写查询。【参考方案2】:

对于支持分页的 Exists 子查询的查询,我遇到了同样的问题。我们通过将子查询重写为一个简单的查询来识别问题,然后提出了一个更改子查询选择语句的简单解决方案:我们更改为仅选择我们需要的字段tablename.id,而不是使用tablename.*我们的案例。问题就解决了。

希望这会有所帮助。

【讨论】:

以上是关于选择语句在 Oracle 11 上给出 ora-03113的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 选择查询优化

Navicat:连接Oracle时,提示ORA-28547,Cannot load OCI DLL.193,ORA-03135错误

Navicat:连接Oracle时,提示ORA-28547,Cannot load OCI DLL.193,ORA-03135错误

Oracle 选择多条记录的最大日期

在Oracle 11g 中创建表时如何保存表?

Oracle 变量作为选择