108-ORA-00600 [kdsgrp1-qetlbr] 内部错误排查与 RMAN 块级恢复
1、故障背景一个工作日的下午存储双控同时丢包控制器轮流掉线数据库系统出现卡顿CDR 平台直接crushPDB 环境 CDR50 开始发现 alert 日志持续报出内部错误。实例为 Oracle 19c 19.24采用 CDB 架构承载核心业务表 DC_EXAM_REQUEST。先说故障症状原因节约浏览时间本次故障由两个根因叠加触发数据块逻辑损坏 索引与表数据不一致。RMAN 全库验证未发现物理坏块但特定数据块在一致性读取时触发了 KDSKernel Data Segment层内部错误。2、错误现象Alert 日志登录服务器 X.X.0.104查看 alert 日志[oraclecdb-104]:~$ tail -100 /u01/app/oracle/diag/rdbms/cdrcdb/cdrcdb/trace/alert_cdrcdb.log Errors in file /u01/app/oracle/diag/rdbms/cdrcdb/cdrcdb/trace/cdrcdb_ora_24077.trc: ORA-00600: internal error code, arguments: [kdsgrp1-qetlbr], [6], [86110356], [4], [], [], [], [], [], [], [], [] CDR50(3):Incident details in: /u01/app/oracle/diag/rdbms/cdrcdb/cdrcdb/incident/incdir_361360/cdrcdb_ora_24077_i361360.trc *** 2025-08-31T08:27:19.12308:00 *** 2025-08-31T08:27:19.12308:00 [CDR50] (3): *** 2025-08-31T08:27:19.12308:00 (3):Incident 361360 created, dump file: cdrcdb_ora_24077_i361360.trcORA-00600 是 Oracle 的通用内部错误信号第一个参数 [kdsgrp1-qetlbr] 指明了出错的函数位置——KDSGRP1Kernel Data Segment Get Row Piece 1即数据段读取行片段时发生异常。3、错误参数解读完整错误信息如下ORA-00600: internal error code, arguments: [kdsgrp1-qetlbr], [6], [86110356], [4], [], [], [], [], [], [], [], []位置值含义Arg 1kdsgrp1-qetlbr错误函数标识KDS 层读取行片段失败调用来源为 QETLBR行级别一致性读Arg 26表空间编号Tablespace NumberArg 386110356相对数据块地址RDBA, Relative Data Block Address需转换为文件号 块号Arg 44块内行槽位号Row Slot / Slot Index指向具体某一行4、原因分析查阅MOS资料kdsgrp1 错误通常由以下几类原因触发本次故障为前两项叠加数据块逻辑损坏--此次大概率是主控故障中招Buffer Cache 中的块在一致性读时发现数据不一致如 ITL 槽位异常、行片链接断裂或磁盘上的块存在逻辑层面的损坏导致数据库无法正确组装行数据。索引与表数据不一致查询通过索引访问路径定位行但索引条目指向的 ROWID 在表中不存在或位置偏移。此类问题在全文检索CONTAINS、位图索引或高并发 DML 场景下尤为常见。Buffer Cache 内存异常内存中的数据块被意外篡改或 LRU 刷新异常重启后可能自行恢复。Oracle 已知 Bug--未触发特定版本在并行 DML、闪回查询、一致性读等场景下存在已知缺陷。数据块故障模拟图5、排查过程5.1 从 trace 文件提取文件号与块号根据 alert 日志中的 incident 路径打开 trace 文件 cdrcdb_ora_24077_i361360.trc定位到具体的数据文件号和块号*** 2025-08-31T08:27:19.12308:00 kdedem: KDSGRP1 (4) args: 6 86110356 4 ----- Current SQL Statement for this session (sql_id7v2kf8m3n4x5y) ----- SELECT * FROM NHIP_DC.DC_EXAM_REQUEST WHERE EXAM_DATE :1 ... Buffer block dump: buffer dba: 0x05205534 file#: 20 block#: 2224276 Block header dump: rdba: 0x05205534 Object id on Block? Y seg/obj: 0x1a2f3 seg: 0x1a2e4 obj: 0x1a2f3 scn: 0x3471827631 log: none lod: 0 Loaded vs Unloaded scn: 0x3471827631 / 0x3471827631RDBA 换算十进制 86110356 转十六进制为 0x05205534。根据 Oracle RDBA 编码规则前10位为相对文件号后22位为块号可拆出 file# 20block# 2224276。trace 文件中的 Buffer block dump 直接给出了结果无需手工换算。5.2 定位问题所属对象切换到 PDB CDR50查询该块属于哪个段[oraclecdb-104]:~$ sql / as sysdba SQLcl: Release 21.4 Production on Sun Aug 31 08:27:19 2025 Copyright (c) 1982, 2025, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.24.0.0.0 SYSCDB$ROOT show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED _________ __________ ___________ ______________ 2 PDB$SEED READ ONLY NO 3 CDR50 READ WRITE NO SYSCDB$ROOT alter session set containercdr50; Session altered. SYSCDB$ROOT SELECT owner, segment_name, segment_type, partition_name 2 FROM dba_extents 3 WHERE file_id 20 4 AND 2224276 BETWEEN block_id AND block_id blocks - 1; OWNER SEGMENT_NAME SEGMENT_TYPE PARTITION_NAME __________ _________________ __________________ _________________ NHIP_DC DC_EXAM_REQUEST TABLE PARTITION EXAM_REQUEST_M SYSCDB$ROOT目标对象确认NHIP_DC.DC_EXAM_REQUEST 的分区 EXAM_REQUEST_M月分区表。5.3 验证对象结构完整性对目标表及其关联索引执行结构校验确认是否存在逻辑不一致SYSCDB$ROOT ANALYZE TABLE NHIP_DC.DC_EXAM_REQUEST VALIDATE STRUCTURE CASCADE ONLINE; Table analyzed. SYSCDB$ROOT ANALYZE TABLE NHIP_DC.EXAM_REQUEST_M VALIDATE STRUCTURE CASCADE ONLINE; Table analyzed. -- 未报出 ROWID 不匹配或索引条目缺失说明逻辑层面结构基本完整。5.4 RMAN 物理验证数据文件使用 RMAN 对数据文件 20 执行逻辑验证检查是否存在坏块[oraclecdb-104]:~$ rman target / Recovery Manager: Release 21.0.0.0.0 - Production on Sun Aug 31 08:30:00 2025 Copyright (c) 1982, 2025, Oracle and/or its affiliates. All rights reserved. connected to target database: CDRCDB (DBID1234567890) RMAN VALIDATE DATAFILE 20 CHECK LOGICAL; Starting validate at 31-AUG-25 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID2362 device typeDISK channel ORA_DISK_1: starting validation of datafile channel ORA_DISK_1: specifying datafile(s) for validation input datafile file number00020 name/oradata/CDRCDB/cdr50/NHIP_DC20250226.dbf channel ORA_DISK_1: validation complete, elapsed time: 00:01:25 List of Datafiles File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 20 OK 0 1767176 4096000 3471827631 File Name: /oradata/CDRCDB/cdr50/NHIP_DC20250226.dbf Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 407759 Index 0 238107 Other 0 1682958 Finished validate at 31-AUG-25 RMANRMAN VALIDATE 报告 Marked Corrupt 0所有块 Failing 0。这说明磁盘上的数据文件物理层面没有坏块——问题属于逻辑不一致可能是内存块在某次一致读时状态异常或索引条目与表行在 SCN 维度上存在错位。6、RMAN 块级恢复尽管 RMAN 全文件验证未报物理坏块但我们仍可对出错的具体块执行 BLOCK RECOVER利用备份中的干净镜像重建该数据块消除内存与磁盘间的逻辑不一致。RMAN RECOVER DATAFILE 20 BLOCK 2224276; Starting recover at 31-AUG-25 using channel ORA_DISK_1 starting media recovery channel ORA_DISK_1: restoring block(s) from datafile backup piece channel ORA_DISK_1: media recovery complete, elapsed time: 00:00:00 media recovery complete, elapsed time: 00:00:00 Finished recover at 31-AUG-25 RMAN恢复成功块级恢复在 1 秒内完成仅重算了这一个块的变更向量redo apply不需要将数据文件 offline对业务无感知。相比整文件恢复块级恢复将影响范围降到了最低。7、验证与收尾恢复完成后持续观察 alert 日志确认错误不再复现[oraclecdb-104]:~$ tail -f /u01/app/oracle/diag/rdbms/cdrcdb/cdrcdb/trace/alert_cdrcdb.log -- 持续观察 24 小时无新的 ORA-00600 报错 -- 业务侧查询 NHIP_DC.DC_EXAM_REQUEST 正常返回结果 故障已消除块级恢复生效 同时建议对该表关联的索引执行重建或校验以排除索引与表数据不一致的残留影响SYSCDB$ROOT -- 检查表索引条目与表行是否匹配 SYSCDB$ROOT ANALYZE TABLE NHIP_DC.DC_EXAM_REQUEST VALIDATE STRUCTURE CASCADE; Table analyzed. -- 如发现索引不一致可在线重建索引 -- ALTER INDEX NHIP_DC.IDX_EXAM_REQUEST_01 REBUILD ONLINE;TIPS定期执行 RMAN VALIDATE每周对核心数据文件做一次逻辑验证提前发现坏块。关注 ORA-00600 的第一个参数kdsgrp1、ktsshrf、kdstblscan 等后缀直接指向故障子系统。块级恢复优先于整文件恢复只要有备份可用BLOCK RECOVER 是影响最小的修复手段。修复后持续观察 24 小时逻辑损坏类问题可能存在恢复后复现的情况需监控确认。