ORA 600 [qkaQknLTPruneKaf:1] BUG 分析与处理

大家好,这里是 DBA学习之路,专注于提升数据库运维效率。

目录

前言

今天检查一套 Oracle 12.1 单机数据库发现 alert 日志报错 ORA-600 [qkaQknLTPruneKaf:1],本文记录一下处理过程。

问题描述

日常检查数据库,adrci 检查发现报错:

bash 复制代码
[oracle@lucifer ~]$ sqlplus -v

SQL*Plus: Release 12.1.0.2.0 Production

adrci> show problem  

ADR Home = /u01/app/oracle/diag/rdbms/lucifer/lucifer:
*************************************************************************
PROBLEM_ID           PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME                             
-------------------- ----------------------------------------------------------- -------------------- ----------------------------------------     
1                    ORA 600 [qkaQknLTPruneKaf:1]                                113105               2025-03-25 14:02:29.144000 +08:00       
2                    ORA 600 [kewuxs_1]                                          113106               2025-03-25 14:02:42.486000 +08:00       

查看 alert 日志:

bash 复制代码
ORA-00600: internal error code, arguments: [qkaQknLTPruneKaf:1], [], [], [], [], [], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [kewuxs_1], [600], [ORA-00600: internal error code, arguments: [qkaQknLTPruneKaf:1], [], [], [], [], [], [], [], [], [], [], []
ORA-06512: at "SYS.DBMS_SQL", line 1707
ORA-06512: at "SYS.DBMS_FEATURE_USAGE_INTERNAL", line 312
ORA-06512: at "SYS.DBMS_FEATURE_USAGE_INTERNAL", line 522
ORA-06512: at "SYS.DBMS_FEATURE_USAGE_INTERNAL", line 694
ORA-06512: at "SYS.DBMS_FEATURE_USAGE_INTERNAL", line 791
ORA-06512: at line 1
], [], [], [], [], [], [], [], [], []

日志中可以发现数据库每天都在报错:ORA 600 [qkaQknLTPruneKaf:1],明显是不正常的现象。

问题分析

查看 alert 报错对应的 trc 文件内容:

bash 复制代码
----- Incident Context Dump -----
Address: 0x7ffc986bb400
Incident ID: 113625
Problem Key: ORA 600 [qkaQknLTPruneKaf:1]
Error: ORA-600 [qkaQknLTPruneKaf:1] [] [] [] [] [] [] [] [] [] [] []
[00]: dbgexProcessError [diag_dde]
[01]: dbgeExecuteForError [diag_dde]
[02]: dbgePostErrorKGE [diag_dde]
[03]: dbkePostKGE_kgsf [rdbms_dde]
[04]: kgeadse []
[05]: kgerinv_internal []
[06]: kgerinv []
[07]: kgeasnmierr []
[08]: qkaQknLTPruneKaf [SQL_Code_Generator]<-- Signaling
[09]: qkaQknPruneKaf [SQL_Code_Generator]
[10]: qknProjPushNode_Int [SQL_Code_Generator]
[11]: qknProjPushNode [SQL_Code_Generator]
[12]: qkeWalkAllQueryNodes [SQL_Code_Generator]
[13]: qknProjPushStmt [SQL_Code_Generator]
[14]: qkeProjPrune [SQL_Code_Generator]
[15]: qkadrv2 [SQL_Code_Generator]

该问题在 MOS 上搜索后发现是一个 BUG:

ORA-00600:[qkaQknLTPruneKaf:1] WHEN _NLJ_BATCHING_ENABLED=0 ON ORACLE 12C (Doc ID 2067672.1)

其描述与本次内容基本一致:

查看隐含参数 _NLJ_BATCHING_ENABLED 在数据库中的值:

sql 复制代码
set line2222 pages1000
col name for a40
col value for a10
col describ for a60
select x.ksppinm name, y.ksppstvl value, x.ksppdesc describ
from sys.x$ksppi x, sys.x$ksppcv y
where x.inst_id = userenv ('instance')
and y.inst_id = userenv ('instance')
and x.indx = y.indx
and x.ksppinm = '_nlj_batching_enabled';

NAME                                     VALUE      DESCRIB
---------------------------------------- ---------- ------------------------------------------------------------
_nlj_batching_enabled                    0          enable batching of the RHS IO in NLJ

确实值被设置为 0,与该 BUG 现象完全一致,根据 MOS 建议有两种解决方案:

这个问题 Oracle 官方提供了两种解决方案:

  1. 打补丁 26153372(需要停机)
  2. 修改隐含参数 _nlj_batching_enabled=1(在线修改)

如果停机时间充足的情况下,还是比较建议打补丁。

问题解决

打补丁修复,首先检查 OPatch 是否符合要求:

bash 复制代码
[oracle@lucifer ~]$ cd $ORACLE_HOME
[oracle@lucifer dbhome_1]$ cd OPatch/
[oracle@lucifer OPatch]$ ./opatch version
OPatch Version: 12.1.0.1.3

OPatch succeeded.

补丁 README 需要 opatch 版本为:12.1.0.1.4 or the latest version,这里 12.1.0.2 版本下载 12CR2 版本的 OPatch 即可:

OPatch - 可以在什么位置找到最新版本的 OPatch(6880880)?[视频] (Doc ID 1525335.1)

更新 OPatch 版本:

bash 复制代码
[root@lucifer u01]# chown oracle:oinstall /home/oracle/p6880880_122010_Linux-x86-64.zip 
[oracle@lucifer ~]$ unzip -qo p6880880_122010_Linux-x86-64.zip -d $ORACLE_HOME
[oracle@lucifer ~]$ cd $ORACLE_HOME/OPatch
[oracle@lucifer OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.45

OPatch succeeded.

解压补丁:

bash 复制代码
[root@lucifer ~]# chown oracle:oinstall /home/oracle/p26153372_121020_Linux-x86-64.zip
[oracle@lucifer ~]$ unzip -q p26153372_121020_Linux-x86-64.zip 

执行安装前检查:

bash 复制代码
[oracle@lucifer ~]$ cd 26153372/
[oracle@lucifer 26153372]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 12.2.0.1.45
Copyright (c) 2025, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/12.1.0.2/dbhome_1
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/oracle/product/12.1.0.2/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.45
OUI version       : 12.1.0.2.0
Log file location : /u01/app/oracle/product/12.1.0.2/dbhome_1/cfgtoollogs/opatch/opatch2025-03-26_15-12-18PM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

关闭 oracle 相关资源:

bash 复制代码
## 关闭监听
[oracle@lucifer ~]$ lsnrctl stop

## 关闭数据库
SQL> shu immediate

正式安装补丁:

bash 复制代码
[oracle@lucifer 26153372]$ $ORACLE_HOME/OPatch/opatch apply

安装完成后检查补丁:

bash 复制代码
$ORACLE_HOME/OPatch/opatch lspatches

关闭 oracle 相关资源:

bash 复制代码
## 关闭监听
[oracle@lucifer ~]$ lsnrctl start

## 打开数据库
SQL> startup

后续检查是否还会报错 ORA-600 即可。

写在最后

既然 BUG 难以避免,做好备份尤为重要。

相关推荐
小徐Chao努力33 分钟前
【记录手贱bug日常】IDEA 配置vmoptions后打不开,重新安装,删注册表均无用
java·bug·intellij-idea
月临水12 小时前
软件测试笔记1(测试的概念、测试和开发模型介绍、BUG介绍)
软件测试·笔记·bug
种时光的人12 小时前
多线程出bug不知道如何调试?java线程几种常见状态
java·python·bug
测试工程喵12 小时前
如何高效定位Bug:测试工程师的问题诊断艺术
功能测试·测试用例·bug·模块测试·缺陷管理·bug定位
灵犀海棠3 天前
vue3项目启动bug
bug
家庭云计算专家3 天前
ONLYOFFICE深度解锁系列.2-Excel 跨文件数据整合实战指南-可道云的另一个严重bug
云计算·编辑器·bug·excel
不会编程的程序員3 天前
【解决方法】关于解决QGC地面站4.4.3中文BUG,无法标注航点的问题
bug
liuluyang5303 天前
linux 4.14内核jffs2文件系统不自动释放空间的bug
linux·elasticsearch·bug·jffs2