问题描述
作为Oracle DBA,无时无刻不在与各种错误打交道,尤其是ORA-00600错误,在面对这些错误时,除了遭遇得来的经验之外,还要学会把握其中的共性,进而能够通过猜测和简单的推理做出初步的判断。这是对于DBA最为基本的素质要求。这里记录的KGHALO4错误来自一个网友的汇报。
专家解答
我们可以通过猜测做出基本的判断:KGH 即 Kernel Genric Heap,如果加上一点积累和搜索,可以得出以下准确判定:Kernel Generic shared Heap manager.
ALO 即 Allocate ,这些提示表明,这是在分配共享内存堆时出现的错误,也就可以基本判定,这个错误不会带来数据损坏,大致可能和Shared Pool内存的分配相关。
接下来,如果可能,通过MOS可以获得一些帮助,判定是否是BUG引起的。
对于这则错误,MOS上的解释是:
DESCRIPTION:
The recovery location must be nulled by the client.
We are trying to allocate memory from the Shared Pool and the caller has not passed a pointer whose value is null. ARGUMENTS: Arg [a] Memory pointer
FUNCTIONALITY: Heap Manager
Note 273721.1上列举了很多BUG,最常见的,与网友相符和的BUG是:4414666 ,这个BUG影响10.2.0.1,在10.2.0.2中被修正。
NOTE:4414666.8 Title: Bug 4414666 - OERI[KGHALO4] can occur on NUMA
一个临时解决方案是设置参数:
_enable_NUMA_optimization=FALSE
禁用NUMA,或者尝试设置更大的Shared Pool ,对于ASM实例,需要设置如下两个参数:
_enable_NUMA_optimization = FALSE
_disable_instance_params_check = TRUE