创建实体化视图时出现 ORA-00600

Posted

技术标签:

【中文标题】创建实体化视图时出现 ORA-00600【英文标题】:ORA-00600 when Creating Materialized View 【发布时间】:2021-11-15 01:44:02 【问题描述】:

我正在尝试使用以下内容创建物化视图:

CREATE MATERIALIZED VIEW orders_mv AS
  SELECT *
  FROM (SELECT * FROM table1
        UNION
        SELECT * FROM table2
        ORDER BY DBMS_RANDOM.VALUE)
  WHERE rownum <= 5;

但它给了我一个 ORA-00600 并用通常的断开错误断开我:

CREATE MATERIALIZED VIEW orders_mv
                   *
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 89299
Session ID: 11416 Serial number: 40331

我们正在运行 Oracle 12c。以这种方式创建物化视图和使用 order by 子句是否存在一些错误?

【问题讨论】:

ORA-00600 错误只能由 Oracle 支持部门诊断和解决。它们可能表明存在错误,但 Mathguy 的回答中也有很多很好的观察结果。我的猜测是,如果您遵循他的建议,内部错误将自行解决;否则准备打开服务请求。您将无法在此论坛上获得有关 ORA-00600 错误的详细帮助。 【参考方案1】:

这与物化视图无关。您是否尝试在不创建视图的情况下自行运行select?这将是试图弄清楚发生了什么的第一步。

在具有集合操作的查询(例如UNION)中,order by 子句只能引用select 列表中的列:按编号,或者如果您明确列出列,则按名称(或按别名,如果你使用了别名)。

具体来说,你不能order bydbms_random.value 这样的表达式。甚至不允许您通过仅依赖于 select 列表中具体命名的列的算术表达式(例如,或字符串表达式等)进行排序。

所以:即使您命名了 select 列表中的所有列(而不是 select * 的不良做法),您也无法执行您尝试的操作。您仍然只能按 select 中的列排序 - 如果您尝试与 set 操作“在同一级别”进行排序。

相反,您需要三个级别的select。在嵌套最深的子查询中,执行UNION 但不要尝试排序。在中间的select 语句中,将子查询的结果按dbms_random.value 排序。在rownum 的外部查询过滤器中。这也适用于select *(这只是一种糟糕的做法,但它是有效的)。

【讨论】:

看起来 3 级查询有效。似乎他们在组合表中有 X 条记录,但在最终 MV 中只需要 5 个随机样本。所以,感谢提示。是的,我同意,列出列名总是比 *.非常感谢!【参考方案2】:

您的问题可以在 Windows 上的 Oracle XE 版本 18.4.0.0.0 中重现(注意如果是 ORA-0600这是相关信息)

.... 
No more data to read from socket

正如在其他答案中诊断的那样:

CREATE MATERIALIZED VIEW orders_mv AS
  SELECT *
  FROM (SELECT DBMS_RANDOM.VALUE rnd, table1.* FROM table1
        UNION
        SELECT DBMS_RANDOM.VALUE rnd, table2.* FROM table2
        ORDER BY 1)
  WHERE rownum <= 5;

【讨论】:

以上是关于创建实体化视图时出现 ORA-00600的主要内容,如果未能解决你的问题,请参考以下文章

求教ORACLE的问题,我用的是ORACLE 9I,出现一个ORA-00600:内部错误代码,参数:[qernsRowP],[1],[]....

Oracle 创建触发器语句失败,内部错误代码 ORA-00600

ORA-00600: 内部错误代码,参数:[5213],[][][][],oracle 8

Oracle 11g XE "alter table drop column" 导致 ORA-00600

ORA-00600 [kpdbLoadCbk-bad-obj#] ORA-65106 手动修复PDB container$信息

impdp报错:ORA-31693, ORA-02354, ORA-00600