一个ORA-00600问题的简单分析(r12笔记第18天)

  在前些天尝试使用sysbench来压测Oracle,没想到初战就不顺利,因为初始化几百万数据库,竟然一个小时过去了,一个表的数据都没有初始化好,这个可让我大大失望,所以我就强制清理了会话,把数据初始化流程给终止了。

   今天想继续试试,看看能不能优化一些地方。但是刚开始跑初始化数据的脚本的时候,就抛出了一个ORA-00600的错误。

错误信息如下:

Creating table 'sbtest1'...
FATAL: OCIStmtExecute failed in drv_oracle.c:736
ALERT: Error - ORA-00600: internal error code, arguments: [ktsscrsegfmt:objdchk_kcbnew_3], [0], [87534], [4], [], [], [], [], [], [], [], []
FATAL: failed query was: 'CREATE TABLE sbtest1 (
id INTEGER NOT NULL,
k INTEGER,
c CHAR(120) DEFAULT '' NOT NULL,
pad CHAR(60) DEFAULT '' NOT NULL,
PRIMARY KEY (id)
) '
FATAL: failed to execute function `prepare': (null)这可就奇怪了,对于这个问题,我认为有几个可能性。

尝试1

   首先这个错误是在创建表的时候失败,是不是数据库用户层面偶什么设置导致,但是查看了一圈,没有发现这个用户的特别之处,因为单独执行这条语句是没有任何问题的。

尝试2

  
那有没有和回收站有关呢,我的印象中清理里面的数据时,最后是使用了purge
recyclebin的操作。这个操作会不会有影响呢。首先我使用和不适用purge recyclebin或者purge
object,错误信息依旧存在。而有些文章中说和回收站有一定的关系,这一点上对于当前的这个问题,我还是存在疑惑,如果直接禁用,还需要重启数据库,我想继续看看有没有其它的可能性再尝试重启。

alter system set recyclebin=off
                              *
ERROR at line 1:
ORA-02096: specified initialization parameter is not modifiable with this
option

尝试3

我初步怀疑是否和这个用户下存在的数据情况有关,是否这个用户因为之前回滚了一个长时间的事务而导致,但是我重建了一个用户,继续运行初始化数据库脚本,依旧是同样的错误。

尝试4

问题到了这一步,我开始怀疑是否是坏块捣乱,但是查看了几个坏块相关的视图,还是没有发现任何端倪。

 

尝试5

这个时候我们不能猜测了,而需要看看日志,看看错误代码的特定含义,这样对我们分析问题还是大有裨益。于是我切换到了万能的MOS,错误代码是ktsscrsegfmt:objdchk_kcbnew_3

有些场景下的错误代码是

ORA-00600: internal error code, arguments: [ktspfmdb:objdchk_kcbnew_3], [1], [87561], [4], [], [], [], [], [], [

所以objdchk_kcbnew_3是我们分析的重点。

这个ORA-00600的参数代表什么含义呢。我们可以找到一些端倪。比如我们抓取的trace日志里面含有下面的信息。

Problem Key: ORA 600 [ktspfmdb:objdchk_kcbnew_3]
Error: ORA-600 [ktspfmdb:objdchk_kcbnew_3] [1] [87561] [4] [] [] [] [] [] [] [] []
[00]: dbgexExplicitEndInc [diag_dde]
[01]: dbgeEndDDEInvocationImpl [diag_dde]
[02]: dbgeEndDDEInvocation [diag_dde]
[03]: kcbnew [CACHE_RCV]<-- Signaling
[04]: ktspfmdb []
[05]: ktspfmtrng []
[06]: ktspfsall []
[07]: ktspfsrch []
[08]: ktspscan_bmb []
[09]: ktspgsp_main []
[10]: kdisnew []
[11]: kdisnewle []
[12]: kdisle []
[13]: kdiins0 []
[14]: kdiinsp []
[15]: kauxsin []
[16]: qesltcLoadIndexList [SQL_Execution]
[17]: qesltcLoadIndexes [SQL_Execution]
[18]: qerltcNoKdtBufferedInsRowCBK [SQL_Execution]
[19]: qerltcSingleRowLoad [SQL_Execution]
[20]: qerltcFetch [SQL_Execution]
[21]: insexe [DML]ORA-00600后面12个参数,上面从[4]~[15]就是和12个参数的具体调用方式,通过这种方式我们可以找到一些有用的信息,比如末尾的DML可以基本看出是在做一个DML操作,实际上是一个insert操作时抛出的错误。

比如我们可以根据87561基本猜出这是一个object_id,看看参数中代表的是ktspfsall,我们在trace里面很快就能找到一个调用堆栈。

----- Abridged Call Stack Trace -----
ksedsts()+465<-kjzdssdmp()+267<-kjzduptcctx()+232<-kjzdpcrshnfy()+43<-kstdmp()+282<-dbkedDefDump()+10974<-ksedmp
()+41<-ksfdmp()+69<-dbgexPhaseII()+1764<-dbgexExplicitEndInc()+755<-dbgeEndDDEInvocationImpl()+769<-dbgeEndDDEIn
vocation()+52<-kcbnew()+19602<-ktspfmdb()+410
<-ktspfmtrng()+1114<-ktspfsall()+1843<-ktspfsrch()+343<-ktspscan_bmb()+509<-ktspgsp_main()+1428<-kdisnew()+279
----- End of Abridged Call Stack Trace -----可以从trace里面看到有两个不同的object_id,为什么会出现这种情况,我们使用grep的方式来看一下,上面的报错是object_id 87561,这个地方是object_id 87358,后面提示了是INDEX

$ grep obj: /U01/app/oracle/diag/rdbms/perftest/perftest/incident/incdir_3805/perftest_ora_13217_i3805.trc
  dbwrid: 0 obj: 87358 objn: 87358 tsn: 4 afn: 4 hint: f
 seg/obj: 0x1553e  csc: 0x00.11b7fd  itc: 2  flg: E  typ: 2 - INDEX
  dbwrid: 1 obj: 87358 objn: 87358 tsn: 4 afn: 4 hint: f
 seg/obj: 0x1553所以得到的一个基本的信息就是在DML插入数据需要维护索引,但是在这个过程中抛出了错误,实际上87358这个OBJECT_ID是不存在的,这个问题也有可能有多重原因触发,其中一种原因是并发,也是文档中说的比较多的。

有些朋友会碰到这类错误,比如:

alter index oraaud.NN_PARA_RES_INDEX1 rebuild parallel 4 nologging;?至于原因,用metalink中的解释来说:

In metalink, it describes as that a cache buffer holding a database block is in the process of being reused. The buffer is in state “current” and may be reused only if the object is of type temp or undo. The consistency check comparing the block class in the buffer header with the block class passed to the cache by the caller is failing.
当然这个问题如果规避,下面提出了两个相关的链接:

ORA-600 [kcbnew_3] [ID 204512.1]
Bug 6970071 – ORA-600 [kcbnew_3] when recyclebin is active [ID 6970071.8]

其实这个时候我们感觉还是有点隔靴搔痒的感觉,因为毕竟还是有些东西不够明确,我们可以肯定的是这是一个bug.

尝试6

我最后启用了重启大法,然后再次尝试就没有问题了。这个结果多具有黑幽默的感觉。但是确实如此,后续我又模拟了手工杀掉会话,可能事务还不够大,反复尝试都没有再复现这个问题,所以简单来说和回收站还是不大相关,和用户还是不大相关。

时间: 2024-08-21 01:52:06

一个ORA-00600问题的简单分析(r12笔记第18天)的相关文章

MySQL频繁停库的问题分析(r12笔记第33天)

  最近也抽空帮一些网友解决一些问题,有些是Oracle,有些是MySQL,有时候虽然忙忙乎乎,但是解决问题之后还是很有成就感的.   今天来说一个蛮有意思的问题,听起来还很诡异.是一个网友向我咨询,看看能不能给出一些建议.当我看到日志,隐隐感觉这是一个bug的感觉. 详细的日志如下: 2017-04-13 16:25:29 40180 [Note] Server socket created on IP: '::'. 2017-04-13 16:25:29 40180 [Warning] St

MySQL主从不一致发现的细小问题分析(r12笔记第63天)

   今天和同事一起看了一个问题,她在一个主从环境中发现了数据不一致,存在主键冲突.     show slave status的报错信息大概是下面的样子. Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 0 failed executing transaction '0e454161-3169-11e7-98f6

Oracle数据库端口突然无法访问的分析(r12笔记第46天)

 最近碰到一个蛮有启发意义的案例.是数据库监听相关的,但是实际的原因却又出乎意料.  问题的反馈受益于开发同学,一个开发同学在lync上找到我,说现在一个线上业务的数据库访问有些问题,想问问我是否有什么建议.大体了解了下,他们在使用一个非1521的端口,比如端口是1525,他们在业务端看到的错误信息类似下面的样子: java.sql.SQLException: Io exception: The Network Adapter could not establish the connection

Oracle中的PGA监控报警分析二(r12笔记第87天)

今天又收到了一条报警的信息,看起来很常规,但是后面的故事如果你做了分析就会发现其实本身并不平常,我觉得我得出手了. ZABBIX-监控系统: ------------------------------------报警内容: PGA Alarm on alltest ------------------------------------报警级别: PROBLEM ------------------------------------监控项目: PGA:9723.2 -------------

简单分析instagram和path产品

在我们现在的生活,工作,学习过程中,社交网络已经开始成为未来互联网发展的趋势.而Facebook,Twitter,Google++都是时下社交网络的热门产品,他们每月的用户使用量都在逐渐增多. 但是,今天我要谈的并不是那些为我们熟悉的热门互联网产品. 而是在如今,随着社交网络日新月异的变化,我们越来越多的年轻人都在使用着那些手持无线设备上网,然后进行他们的交际圈子,而这也是图片社交新兴的一个时代.随着图片分享的社交形式越来越普及,许多的年轻人都喜欢用图片的形式去分享自己身边发生的人与事,还有去s

jquery的相关内容:jquery的简单分析

文章简介:jquery原理的简单分析,扒开jquery的小外套. 引言 最近LZ还在消化系统原理的第三章,因此这部分内容LZ打算再沉淀一下再写.本次笔者和各位来讨论一点前端的内容,其实有关jquery,在很久之前,LZ就写过一篇简单的源码分析.只不过当时刚开始写博客,写的相对来讲比较随意,直接就把源码给贴上来了,尽管加了很多注释,但还是会略显粗糙. 这次LZ再次执笔,准备稍微规范一点的探讨一下jquery的相关内容. jquery的外衣 jquery是一个轻量级的JS框架,这点相信大部分人都听过

什么是一个好的交互设计:简单的设计

文章描述:操作不太重要,需要突出内容的易读性,可以讲操作隐藏于鼠标悬停之后. 交互设计是近几年流行的一个词语.现在市场上有许多资料来介绍什么是交互设计,如何做交互设计等.从场景,任务,用户,操作等分析.但由于受实际情况的限制,往往不能很深入.所以笔者结合实际工作体验与大家分享下,具体做设计时候是怎么考虑的.如果要说什么是一个好的交互设计,个人浅见就是简单.本文以下内容都是围绕简单2字进行展开. 简单在本文中包括认知和操作两个部分: 1. 认知主要是指人的思维过程,本文中主要说明用户是如何做决定的

Rman操作简单分析

http://www.itpub.net/245264.html Rman操作简单分析 在我的上一篇文章中为大家演示了rman 备份恢复的一个特定例子.(参考:http://www.dbanotes.net/Oracle/Rman...lfile_howto.htm)rman 对dbms_backup.restore 的一些特定调用完梢酝üebug 分析出来.通过设置debug 模式,我们可以跟踪到大量的Log,从而为分析提供一定的说明.假定我们提交如下的命令:rman target /

简单分析针对搜索引擎优化的三个阶段

做SEO优化绝大部分的精力都会放在针对搜索引擎上面的优化,通常针对搜索引擎优化都有三个阶段,下面我们就来简单分析一下这三个阶段! 第一阶段:这是初始化的阶段,这个时期是搜索引擎对新网站的考察期,通常百度考察的比较严格,谷歌考察的比较宽松,此时搜索引擎会对网站的首页会优先收录,算是给站长们的鼓励,对于内容一般收录很少,排名也是镜花水月,看不清楚,搜索引擎的蜘蛛更是很少光顾,此时的优化主要是优化网站的代码,定时定量的更新网站内容,每天做少量的外链,当然这些外链质量要高一点,这个优化阶段大致要花费近一