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 难以避免,做好备份尤为重要。

相关推荐
workflower21 小时前
Fundamentals of Architectural Styles and patterns
开发语言·算法·django·bug·结对编程
lvchaoq1 天前
记录小程序真机bug,而模拟器无法复现
小程序·bug
喜欢便码1 天前
禅道提交bug的几种状态
bug
从前慢,现在也慢1 天前
(3)Bug篇
学习·bug·测试
西柚小萌新2 天前
【Bug:docker】--Docker国内镜像源加载失败
docker·容器·bug
初圣魔门首席弟子4 天前
c++ bug 记录(merge函数调用时错误地传入了vector对象而非迭代器。)
java·c++·bug
Qiuner4 天前
历劫波,明真我——Debug Commune
ai·开源·bug·debug·信息差·信息·交流
川石课堂软件测试6 天前
什么是BUG,你对BUG的了解有多少?
android·linux·服务器·python·功能测试·bug·安全性测试
仰望星空的凡人6 天前
【BUG排查】基于RH850F1KMS1的主控出现系统中断错误,调试FEIC的值为0x11
单片机·bug·rh850·renesas