ORA-00600 [17114] 错误排查实录:一次由“新排序算法”引发的血案

来源:这里教程网 时间:2026-03-03 22:43:59 作者:

一、诡异的“断线”:问题初现

在一次常规的数据库操作中,我们遇到了一个非常棘手的现象。当尝试为某个表创建索引时,SQL*Plus 会话被意外中断,并抛出了经典的“掉线”错误:ORA-03113。故障操作:

SQL> CREATE INDEX idx_guojiaybypmlbz ON siim.SYB_XYZCY (guojiaybypmlbz);
CREATE INDEX idx_guojiaybypmlbz ON siim.SYB_XYZCY (guojiaybypmlbz)
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel

更奇怪的是,不仅创建索引失败,就连对这个特定字段进行查询,也会触发同样的问题,这表明问题并非偶然。

二、深入追踪:Alert 日志中的蛛丝马迹

ORA-03113 通常只是表面现象,真正的“元凶”隐藏在后端的 alert.log 文件中。通过检查告警日志,我们发现了两条关键的错误信息:

ORA-00600: internal error code, arguments: [17114], [0x7F7F0CAFBB80], [], [], [], [], [], [], [], [], [], []
ORA-07445: exception encountered: core dump [smboKb2Qb()+21] [SIGSEGV] [ADDR:0x0] [PC:0x96B901D] [SI_KERNEL(general_protection)] []

ORA-00600 内部错误和 ORA-07445 核心转储同时出现,这强烈暗示我们可能遇到了一个 Oracle 的 BUG。

三、揭开真相:MOS 上的“官方答案”

带着 ORA-00600 [17114] 这个关键线索,我们在 My Oracle Support (MOS) 上进行了搜索,很快就定位到了相关的技术文档:

(Doc ID 1941167.1)

根据文档描述,这个问题与 Oracle 12.2.0.1 版本中引入的一种新排序算法(New Sort Algorithm) 有关。在特定场景下,这个新算法的缺陷会导致内部错误和进程崩溃。

四、临时解决方案:禁用新排序算法

既然是新特性引发的 BUG,那么最直接的临时解决方案就是“回到过去”——禁用这个新特性。Oracle 提供了一个隐含参数 _newsort_enabled 来控制是否启用新的排序算法。我们可以通过在会话级别将其设置为 FALSE 来规避这个问题。解决方法:

ALTER SESSION SET "_newsort_enabled" = FALSE;

重要提示:这是一个会话级别的临时处理方案。因为禁用新排序算法可能会导致某些 SQL 的执行计划发生改变,从而影响性能。在生产环境中全面实施前,务必进行充分的性能测试。在执行了上述 ALTER SESSION 命令后,我们再次尝试创建索引,操作顺利完成,问题得到解决。

相关推荐