首页 » ORACLE 9i-23c » Troubleshooting ORA-600: internal error code, arguments: [kksgaGetNoAlloc_Int0], [34], [24],

Troubleshooting ORA-600: internal error code, arguments: [kksgaGetNoAlloc_Int0], [34], [24],

近期一套Oracle Database 12c (12.1.0.2.0)数据库在RAC ADG , 在standby端一个查询select语句涉及分区表, SQL解析时触发ora-600 [kksgaGetNoAlloc_Int0], [34], [24], 因为11.2.0.4对分区表对象在DDL后除了基础对象外引入了一个KGL handle 多版本对象,当分区计数和详细信息之间不匹配报错。

ORA-00600: internal error code, arguments: [kksgaGetNoAlloc_Int0], [34], [24], [], [], [], [], [], [], [], [], []
========= Dump for incident 81551 (ORA 600 [kksgaGetNoAlloc_Int0]) ========
[TOC00003]
----- Beginning of Customized Incident Dump(s) -----
kksgaArrDump(): kksgaArr=c000002add6cf7c8, isSpecial=1, magic=0x47656f72 [ok]
firstN=24, firstNsegm=1
nElems=24, loElem=0, hiElem=24, maxSize=24, itSize=192
lvl=0, hi1BitFanout=0, lvl0=c000002add6cfac0, bv=c000002add6cfac8
heapP=c000002adab88098, clear=1, subHeap=0

sql :
 select * from xxx
   left join   partitioned_tablexxx on xxx
   left join  partitioned_tablexxx on xxx
  where xxx

----- Abridged Call Stack Trace -----
ksedsts()+336<-kjzdssdmp()+496<-kjzduptcctx()+656<-kjzdpcrshnfy()+80<-kstdmp()+576<-$cold_dbkedDefDump()+20448<-ksedmp()+480<-ksfdmp()+160<-dbgexPhaseII()+3440<
-dbgexExplicitEndInc()+1840<-dbgeEndDDEInvocationImpl()+864<-dbgeEndDDEInvocation()+224<-$cold_kksgaGetNoAlloc_Int()+336
<-qksmaGetTblStats_Int()+96<-kkeits()+4320<-kkoiqb()+12208<-kkooqb()+1232<-kkoqbc()+6320<-apakkoqb()+384<-apaqbdDescendents()+896
----- End of Abridged Call Stack Trace -----

kksgaGetNoAlloc_Int Get the element at a specific index
qksmaGetTblStats_Int Get stats for a particular partition Internal

ORA-00600: internal error code, arguments: [kksgaGetNoAlloc_Int0], [34], [24] 由于分区计数和详细信息之间不匹配

This bug can cause ORA-600, ORA-8103, ORA-1555, and wrong results when accessing partitioned objects on physical standby systems that are also RAC systems.

相关bug
Bug 19614585 Wrong Results / ORA-600 [kksgaGetNoAlloc_Int0] / ORA-600 [12406] / ORA-7445 / ORA-8103 / ORA-1555 from query on RAC ADG Physical Standby Database

如果在primary 上没有问题,只是在standby 可能是上面的这个bug
Oracle 11.2.0.4 “_part_access_version_by_number” = false
原因是因为主库做了DDL 后,正常应该是把本地节点的基础对象与版本化对象失效,然后再把远程实例的基础对象与版本化对象失效,但如果远程节点中没有cache 基础对象,代码中忘记清理远程的该version 对象失效。 该问题还可能发生成RAC的两个不同节点。

临时解决方法

可以配置实例级改_part_access_version_by_number=FALSE 参数,

flush shared_pool重试该SQL.

另一个相关BUG,如果以上修复没有启作用可以尝试如下配置
Bug 25335790 : ORA-600 [KKSGAGETNOALLOC_INT0] ON ACTIVE DATABASE
原因是引入了16954950后导致, 显示 call stack 会包含… kksgaGetNoAlloc_Int qksmaGetTblStats_Int kketac …

kketac returns cost of accesing a table given predicates and access

临时解决方法
alter session set “_fix_control”=’16954950:OFF’;

打赏

,

对不起,这篇文章暂时关闭评论。