5月26日凌晨某客户实例警告日志中出现”ORA-00600: internal error code, arguments: [kcbz_check_objd_typ_3], [0], [0], [1], [], [], [], []“,经过分析发现与之前CR实例发生的600错误情况症状相同。
从跟踪文件m1_m0001_4209.trc中可以看到当时的执行的SQL语句,如附件。
PL/SQL的调用堆栈为:
—– PL/SQL Call Stack —–
object line object
handle number name
3f3e89300 10 package body SYS.PRVT_HDM
3f5e9d3d8 16 SYS.WRI$_ADV_HDM_T
3f3f90898 1535 package body SYS.PRVT_ADVISOR
3f3f90898 1618 package body SYS.PRVT_ADVISOR
3f3e89300 106 package body SYS.PRVT_HDM
3eb69a3f8 1 anonymous block
函数调用堆栈为:
kgerinv kgeasnmierr kcbassertbd3 kcbz_check_objd_typ kcbzib kcbgtcr ktrget kdsgrp kdsfbr qertbFetchByRowid rwsfcd…….
以上信息与metalink Bug 4430244 中的描述完全一致,原因为Segment advisor的代码错误的将已被drop的对象数据块加载到缓存区中,导致后续的操作出现错误。
通过之前的调查已明确当前系统中已应用过Bug 4430244的补丁,认为可能是ORACLE没有解决但存在的未知BUG,或者是以前 提供的4430244补丁存在缺陷,原因如下:
1. 已确定目前所应用的小补丁没有冲突,即各小补丁所实现的功 能不受影响;
2. 当前数据库系统已经使用了与本次错误信息完全符合的bug 4430244的小补丁;
3. 当相关的小补丁都应用之后,在metalink上仍有客户提交完全相同的错误(详见bug 7032704和bug 6818725)。
4. 本次错误相关的数据块与以前(2008年7月)出现的不一致,因此不是物理存储上的损坏。
5. 本次错误与Bug 6388743 “ORA-00600 [KCBZ_CHECK_OBJD_TYP_3],[0],[0],[1],[],[],[],[] OCCURRED”中的描述完全一致,ORACLE猜测是但没有确定是BUG 4430244, 只是建议使用4430244的小补丁或10.2.0.4的补丁包, 最后此bug以客户应用10.2.0.4补丁包而被视 为结束。真实原因不明。
Metalink在之前该实例出现错误的SR提出以下解决方法:
1. 在RAC的所有实例中冲 刷buffer_cache
使用命令刷数据缓存区后,会使缓存区的数据块都标记为free,即以前缓存的数据都被移出内存。影响主要是在一段时间内使物理读增加,因 此建议在业务空闲时段操作,避免在刷缓存的同时有高负载应用在申请缓存空间。该方法可临时防止相关错误抛出。
2. 停用Segment advisor job
该job相关功能是进行 对象段(如表,索引等)的存储空间状态收集,识别 是否适合根据其可用空间大小进行收缩,并提供建议,例如是否存在较大的浪费空间,表的高水位线是否太高,是否需要进行表的回缩等。如 不需要或不关心对象段的存储空间状态,可不做相关操作。该方法可以长远解决问题的发生。
3. 升级数据库版本至10.2.0.4
author: maclean
permanent link:https://www.askmac.cn/2010/05/31/ora-00600-kcbz_check_objd_typ_3%E9%94%99%E8%AF%AF%E4%B8%80%E4%BE%8B/
date:2010-05-31
All rights reserved.
Leave a Reply