【问题标题】:select statement give ora-03113 on Oracle 11选择语句在 Oracle 11 上给出 ora-03113
【发布时间】: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?

标签: oracle oracle10g oracle11g ora-03113


【解决方案1】:

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

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

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

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

【讨论】:

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 2018-04-28
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2011-11-18
    • 2019-01-13
    相关资源
    最近更新 更多