大家好,这里是DBA学习之路,专注于提升数据库运维效率。
前言
今天检查一套 Oracle 12.1 单机数据库发现 alert 日志报错 ORA-600 [qkaQknLTPruneKaf:1],本文记录一下处理过程。
问题描述
日常检查数据库,adrci 检查发现报错:
[oracle@lucifer ~]$ sqlplus-vSQL*Plus: Release12.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 -------------------- ----------------------------------------------------------- -------------------- ----------------------------------------1ORA600[qkaQknLTPruneKaf:1]1131052025-03-2514:02:29.144000 +08:002ORA600[kewuxs_1]1131062025-03-2514:02:42.486000 +08:00查看 alert 日志:
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", line1707ORA-06512: at"SYS.DBMS_FEATURE_USAGE_Internal", line312ORA-06512: at"SYS.DBMS_FEATURE_USAGE_Internal", line522ORA-06512: at"SYS.DBMS_FEATURE_USAGE_Internal", line694ORA-06512: at"SYS.DBMS_FEATURE_USAGE_Internal", line791ORA-06512: at line1],[],[],[],[],[],[],[],[],[],[],[],[]日志中可以发现数据库每天都在报错:ORA 600 [qkaQknLTPruneKaf:1],明显是不正常的现象。
问题分析
查看 alert 报错对应的 trc 文件内容:
----- Incident Context Dump ----- Address: 0x7ffc986bb400 Incident ID:113625Problem Key: ORA600[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在数据库中的值:
setline2222 pages1000 col namefora40 colvaluefora10 col describfora60selectx.ksppinm name,y.ksppstvlvalue,x.ksppdesc describfromsys.x$ksppi x,sys.x$ksppcv ywherex.inst_id=userenv('instance')andy.inst_id=userenv('instance')andx.indx=y.indxandx.ksppinm='_nlj_batching_enabled';NAMEVALUEDESCRIB---------------------------------------- ---------- ------------------------------------------------------------_nlj_batching_enabled0enablebatchingofthe RHS IOinNLJ确实值被设置为 0,与该 BUG 现象完全一致,根据 MOS 建议有两种解决方案:
这个问题 Oracle 官方提供了两种解决方案:
- 打补丁
26153372(需要停机) - 修改隐含参数
_nlj_batching_enabled=1(在线修改)
如果停机时间充足的情况下,还是比较建议打补丁。
问题解决
打补丁修复,首先检查 OPatch 是否符合要求:
[oracle@lucifer ~]$cd$ORACLE_HOME[oracle@lucifer dbhome_1]$cdOPatch/[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 版本:
[root@lucifer u01]# chown oracle:oinstall /home/oracle/p6880880_122010_Linux-x86-64.zip[oracle@lucifer ~]$unzip-qop6880880_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.解压补丁:
[root@lucifer ~]# chown oracle:oinstall /home/oracle/p26153372_121020_Linux-x86-64.zip[oracle@lucifer ~]$unzip-qp26153372_121020_Linux-x86-64.zip执行安装前检查:
[oracle@lucifer ~]$cd26153372/[oracle@lucifer26153372]$$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail-ph./ Oracle Interim Patch Installer version12.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 Logfilelocation:/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 相关资源:
## 关闭监听[oracle@lucifer ~]$ lsnrctl stop## 关闭数据库SQL>shu immediate正式安装补丁:
[oracle@lucifer26153372]$$ORACLE_HOME/OPatch/opatch apply安装完成后检查补丁:
$ORACLE_HOME/OPatch/opatch lspatches关闭 oracle 相关资源:
## 关闭监听[oracle@lucifer ~]$ lsnrctl start## 打开数据库SQL>startup后续检查是否还会报错 ORA-600 即可。
写在最后
既然 BUG 难以避免,做好备份尤为重要。
📚 推荐阅读:DBA 学习之路
如果这篇文章对你有帮助,推荐访问我的 Oracle DBA 系统学习站点,涵盖 100 天完整学习路线:
- 🔧 Oracle 安装部署 · RMAN 备份恢复 · Data Pump 数据迁移
- 🏗️ RAC 高可用 · DataGuard 容灾 · 多租户架构
- 🔍 故障排查 · 升级迁移 · GoldenGate 数据同步
👉 立即访问 ora100.com →
原文链接: ORA 600 [qkaQknLTPruneKaf:1] BUG 分析与处理
本文首发于 DBA 学习之路,更多 Oracle/MySQL 实战教程、ORA 错误码速查、巡检工具,欢迎访问ora100.com