mapid溢出导致Oracle RAC 节点重启的case

某客户的CRM数据库在2015年9月17号11:38分左出现其中一个节点宕机的情况。其中节点1报错信息如下:

Thu Sep 17 11:38:10 2015
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
NOTE: ASMB terminating
Errors in file /oracle/app/oracle/diag/rdbms/crm2db/crm2db1/trace/crm2db1_asmb_11141424.trc:
ORA-15064: communication failure with ASM instance
ORA-00600: internal error code, arguments: [ORA_NPI_ERROR], [600], [ORA-00600: internal error code, arguments: [kffilCreate01], [crm2db1:crm2db], [], [], [], [], [], [], [], [], [], []
], [], [], [], [], [], [], [], [], []
Errors in file /oracle/app/oracle/diag/rdbms/crm2db/crm2db1/trace/crm2db1_asmb_11141424.trc:
ORA-15064: communication failure with ASM instance
ORA-00600: internal error code, arguments: [ORA_NPI_ERROR], [600], [ORA-00600: internal error code, arguments: [kffilCreate01], [crm2db1:crm2db], [], [], [], [], [], [], [], [], [], []
], [], [], [], [], [], [], [], [], []
ASMB (ospid: 11141424): terminating the instance due to error 15064
Thu Sep 17 11:38:10 2015
System state dump requested by (instance=1, osid=11141424 (ASMB)), summary=[abnormal instance termination].
System State dumped to trace file /oracle/app/oracle/diag/rdbms/crm2db/crm2db1/trace/crm2db1_diag_12714592.trc
Thu Sep 17 11:38:10 2015
opiodr aborting process unknown ospid (22414298) as a result of ORA-1092
Termination issued to instance processes. Waiting for the processes to exit
Thu Sep 17 11:38:25 2015
ORA-1092 : opitsk aborting process
Thu Sep 17 11:38:26 2015
Instance termination failed to kill one or more processes
Instance terminated by ASMB, pid = 11141424
Thu Sep 17 11:39:43 2015
Starting ORACLE instance (normal)
从节点1数据库db alert log日志来看,在11:38:10出现ASM故障,最后在11:38:26时间,节点1的ASM实例被Oracle ASM实例的ASMB进程强行终止,因此导致数据库实例也crash掉。如下是相关日志信息:

Thu Sep 17 11:38:25 2015 ORA-1092 : opitsk aborting process
Thu Sep 17 11:38:26 2015
Instance termination failed to kill one or more processes
Instance terminated by ASMB, pid = 11141424

而此时在节点2的数据库alert log日志中,没有发现其他信息,仅仅只有节点1实例被重启的信息。因此,不难看出,节点ASM实例被强行终止,是此次问题的关键所在。我们进一步分析节点1 ASM实例的日志,发现如下信息:

Tue Sep 15 21:51:52 2015
Time drift detected. Please check VKTM trace file for more details.
Thu Sep 17 11:38:06 2015
Errors in file /oracle/app/grid/diag/asm/+asm/+ASM1/trace/+ASM1_ora_8716976.trc  (incident=179751):
ORA-00600: internal error code, arguments: [kffilCreate01], [crm2db1:crm2db], [], [], [], [], [], [], [], [], [], []
Incident details in: /oracle/app/grid/diag/asm/+asm/+ASM1/incident/incdir_179751/+ASM1_ora_8716976_i179751.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Thu Sep 17 11:38:10 2015
Dumping diagnostic data in directory=[cdmp_20150917113809], requested by (instance=1, osid=8716976), summary=[incident=179751].
Thu Sep 17 11:38:24 2015
Sweep [inc][179751]: completed
Sweep [inc2][179751]: completed
Thu Sep 17 11:39:29 2015
NOTE: ASM client crm2db1:crm2db disconnected unexpectedly.
NOTE: check client alert log.
NOTE: Trace records dumped in trace file /oracle/app/grid/diag/asm/+asm/+ASM1/trace/+ASM1_ora_8716976.trc
Thu Sep 17 11:39:29 2015
System State dumped to trace file /oracle/app/grid/diag/asm/+asm/+ASM1/trace/+ASM1_ora_42729726.trc
Thu Sep 17 11:40:10 2015
NOTE: client crm2db1:crm2db registered, osid 50266474, mbr 0x1

我们可以看到,在11:38:06时间点,ASM实例抛出ORA-00600 [kffilCreate01] 错误后,接着将实例终止,同时将日志信息写入到+ASM1_ora_8716976_i179751.trc文件中,该trace 文件的内容如下:

Address: 0xfffffffffff3cc8
Incident ID: 179751
Problem Key: ORA 600 [kffilCreate01]
Error: ORA-600 [kffilCreate01] [crm2db1:crm2db] [] [] [] [] [] [] [] [] [] []
[00]: dbgexProcessError [diag_dde]
[01]: dbgeExecuteForError [diag_dde]
[02]: dbgePostErrorKGE [diag_dde]
[03]: dbkePostKGE_kgsf [rdbms_dde]
[04]: kgeadse []
[05]: kgerinv_internal []
[06]: kgerinv []
[07]: kgeasnmierr []
[08]: kffilCreate [ASM]<-- Signaling
[09]: kfnsUFG [KFNU]
[10]: kfnsBackground [KFNU]
[11]: kfnDispatch [KFN]
[12]: opiodr []
[13]: ttcpip []
[14]: opitsk []
[15]: opiino []
[16]: opiodr []
[17]: opidrv []
[18]: sou2o []
[19]: opimai_real []
[20]: ssthrdmain []
[21]: main []

我们可以看出,Oracle 在调用kffcicreate函数时出现了异常,进而导致asm实例被强行终止。经过分析我们发现该问题跟Oracle Bug 16357438  (ORA-600 [KFFILCREATE01] IN ASM TRIGGERS DB CRASH WHEN MAPID REACHES MAX VALUE )比较符合。如下是Oracle metalink文档针对该bug的call stack函数描述:

[00]: dbgexProcessError [diag_dde]
[01]: dbgeExecuteForError [diag_dde]
[02]: dbgePostErrorKGE [diag_dde]
[03]: dbkePostKGE_kgsf [rdbms_dde]
[04]: kgeadse []
[05]: kgerinv_internal []
[06]: kgerinv []
[07]: kgeasnmierr []
[08]: kffilCreate [ASM]<-- Signaling
[09]: kfnsUFG [KFNU]
[10]: kfnsBackground [KFNU]
[11]: kfnDispatch [KFN]
[12]: opiodr []
[13]: ttcpip []
[14]: opitsk []
[15]: opiino []
[16]: opiodr []
[17]: opidrv []
[18]: sou2o []
[19]: opimai_real []
[20]: ssthrdmain []
[21]: main []
[22]: __start []

对于Oracle数据库bug的判断,通常的做法是比较报错日志文件中的call stack函数调用是否与Oracle bug的call stack函数描述一致,一般来讲,相似度超多90%,则意味是符合bug的可能性就极大。基于这样的分析,我对比发现call stack与Oracle bug 的call stack描述完全一致。
根据Oracle 文档关于该bug的描述,大致意思是指asm实例的mapid溢出,导出asm实例无法正常运作,进而被asmb进程强行终止;当然,强行终止的目的是为了保持集群节点数据的完整性,如下是从trace文件中提取的mapid信息:

Roger$ cat ASM1_ora_8716976_i179751.trc |grep 'mapid:'
            (kffil) netnm: crm2db1:crm2db, mapid: 4293682398
            (kffil) netnm: crm2db1:crm2db, mapid: 4249534089
            (kffil) netnm: crm2db1:crm2db, mapid: 4185128984
            (kffil) netnm: crm2db1:crm2db, mapid: 4185125967
            (kffil) netnm: crm2db1:crm2db, mapid: 4185121734
            (kffil) netnm: crm2db1:crm2db, mapid: 4152108652
            (kffil) netnm: crm2db1:crm2db, mapid: 4139887931
             .......
            (kffil) netnm: crm2db1:crm2db, mapid: 520724217
            (kffil) netnm: crm2db1:crm2db, mapid: 482740313
            (kffil) netnm: crm2db1:crm2db, mapid: 394435399
            (kffil) netnm: crm2db1:crm2db, mapid: 298438600
            (kffil) netnm: crm2db1:crm2db, mapid: 171948102
            (kffil) netnm: crm2db1:crm2db, mapid: 291
            (kffil) netnm: crm2db1:crm2db, mapid: 289
            (kffil) netnm: crm2db1:crm2db, mapid: 278
            (kffil) netnm: crm2db1:crm2db, mapid: 275
             .......
            (kffil) netnm: crm2db1:crm2db, mapid: 42
            (kffil) netnm: crm2db1:crm2db, mapid: 38
            (kffil) netnm: crm2db1:crm2db, mapid: 3
            (kffil) netnm: <null>, mapid: <null>
            (kffil) netnm: crm2db1:crm2db, mapid: 4294967295
            (kffil) netnm: crm2db1:crm2db, mapid: 4294967294
            (kffil) netnm: crm2db1:crm2db, mapid: 4294967293

我们可以看到,mapid已经达到最大值4294967296,这是Oracle数据库中数据对象的上限,同时我们从trace文件中的KST trace信息中也能看mapid溢出的类似信息:

2015-09-17 11:38:06.075000 :C23CEF42:KFNS:kfn.c@708:kfnDispatch(): calling server stub for KFNOP=5
2015-09-17 11:38:06.075011 :C23CEF45:KFNU:kfns.c@1725:kfnsBackground(): kfnsBackground consuming in-progress message typ=13 unread=1 status=0xfffffff1
2015-09-17 11:38:06.075012 :C23CEF46:KFNU:kfns.c@1963:kfnsConsume(): kfnsConsume message 0x700000124bd6670 status=0xfffffff1 flags=0x0
2015-09-17 11:38:06.075023 :C23CEF4C:KFNU:kfn.c@5313:kfnmsg_Dump(): kfnsBg (kfnmsg) opcode=14 (KFNMS_MAPFREE) fd 0x700000124bea1e0 mid 4294967291, gn [7.3971105324], fn [267.811087543] exts 1025, start 60, cnt 965
2015-09-17 11:38:06.075025 :C23CEF4E:KFNU:kfns.c@1784:kfnsBackground(): kfnsBackground got targeted message
2015-09-17 11:38:06.075029 :C23CEF54:db_trace:kfns.c@5342:kfnsFillMapMsg(): [10491:27:865] MAP_FREE: gn=7 fn=267, mapid=-5
2015-09-17 11:38:06.075047 :C23CEF5C:KFNU:kfns.c@1940:kfnsBackground(): kfnsBackground completed in 0 seconds (KFNPM=2)
2015-09-17 11:38:06.075048 :C23CEF5D:KFNS:kfn.c@739:kfnDispatch(): completed KFNOP=5 callcnt=-1386638497
2015-09-17 11:38:06.075107 :C23CEF7A:KFNS:kfn.c@708:kfnDispatch(): calling server stub for KFNOP=5
2015-09-17 11:38:06.075109 :C23CEF7C:KFNU:kfns.c@1725:kfnsBackground(): kfnsBackground consuming in-progress message typ=14 unread=1 status=0xfffffff1
2015-09-17 11:38:06.075110 :C23CEF7E:KFNU:kfns.c@1963:kfnsConsume(): kfnsConsume message 0x700000126f38a58 status=0xfffffff1 flags=0x0
2015-09-17 11:38:06.075113 :C23CEF83:KFNU:kfn.c@5313:kfnmsg_Dump(): kfnsBg (kfnmsg) opcode=14 (KFNMS_MAPFREE) fd 0x700000124beffe0 mid 4294967292, gn [7.3971105324], fn [267.811087543] exts 1025, start 60, cnt 965
2015-09-17 11:38:06.075114 :C23CEF84:KFNU:kfns.c@1784:kfnsBackground(): kfnsBackground got targeted message
2015-09-17 11:38:06.075118 :C23CEF85:db_trace:kfns.c@5342:kfnsFillMapMsg(): [10491:27:865] MAP_FREE: gn=7 fn=267, mapid=-4
我们可以看出,mapid已经出现了负数,这边表明mapid出现了溢出。
基于前面的种种分析,我们认为此次故障完全符合Oracle bug 16357438的描述细节,因此建议客户在下次维护时间窗口中安装相关Patch。

时间: 2024-08-26 23:24:23

mapid溢出导致Oracle RAC 节点重启的case的相关文章

oracle rac节点频繁重启问题解决办法

这是一个网友的信息,其RAC频繁重启,从9月份以来几乎每间隔2天就要重启,我们先来看看日志. 节点1的alert log: Tue Oct 28 10:51:40 2014 Thread 1 advanced to log sequence 22792 (LGWR switch)  Current log# 107 seq# 22792 mem# 0: +ORADATA/portaldb/redo107.log Tue Oct 28 10:57:16 2014 Thread 1 advanced

Linux主机内存溢出导致oracle的SYS用户无法正常登陆

    一般情况下,ORACLE DBA看到如下情况的第一反应是,数据库实例没有启动或者是数据库环境变量没有设置正确,今天遇到的情况均不是以上两种情况,有点特别,且来看看为哪般. oracle@POC-SV12-I2KDB:~> sqlplus / as sysdba SQL*Plus: Release 11.1.0.7.0 - Production on Thu Aug 13 11:31:58 2015 Copyright (c) 1982, 2008, Oracle.  All rights

由重启引起的Oracle RAC节点宕机分析及追根溯源

作者介绍 裴征峰,现就职于北京海天起点,二线专家成员,南京办事处负责人,OCP 10g.OCP 11g.OCM11g.超八年Oracle服务经验,擅长数据库故障诊断和性能调优.目前主要从事客户的现场维护.重大问题的解决.数据库性能分析.二线服务质量保证等工作.     1 背景说明  某省份的电信业务系统由于业务量较大,按地市划分部署在4套配置相同的RAC上,相同主机版本,相同的CRS和数据库版本.该系统已正常运行3年多,其间也有重启主机等正常维护操作.从4月24日 开始,这个系统的4套RAC的

【中亦安图】风险提醒之Oracle RAC高可用失效(2)

  第一章 技术人生系列 · 我和数据中心的故事(第二期)--风险提醒之Oracle RAC高可用失效 中亦安图 | 2016-01-15 21:36 前言 不知不觉,技术人生·我和数据中心的故事来到了第二期,有朋友开始关心小y是谁,这不重要,我们更关心的是技术层面的分享以及给客户带来的实际的风险提示.后续我们还会继续分享中包括操作系统的小亦,中间件的小W的故事....小y这个名字,其实没有什么特殊的含义,就暂且用他来代表我们这些为数据中心奉献自己无悔青春的运维人吧! 本期分享主题 小y今天要和

技术干货|Oracle RAC上云怎么玩?

本文讲的是技术干货|Oracle RAC上云怎么玩?众所周知,Oracle数据库作为数据中心的核心业务系统,在企业.政府.金融.教育.医疗等行业被广泛应用.Oracle RAC(实时应用集群)是Oracle数据库完全高可用体系解决方案中的一个关键产品,也是Oracle数据库支持网格计算环境的核心技术.目前,大量大型企业的核心ERP.政府的重要业务.医院的HIS等系统都采用了Oracle RAC以保障其稳定运行. 科普:Oracle RAC是什么样的架构? 我们来了解下,Oracle RAC实时应

高可用失灵:交换机导致Oracle集群故障致机场停运

最近日本的一则数据库故障引发了全日航空(ANA)航班停运,被广泛关注. 据日本<产经新闻>3月22日报道,日本全日空航空公司(ANA)的国内航班系统22日8时20分开始发生故障,导致旅客无法办理登机手续,目前正在逐步恢复.但截至22日下午2时,已有超过120架航班停航. 今年2月24日,ANA国内航班系统就曾经发生故障,但30分种后修复,导致一部分航班晚点起飞.在2007年5月27日和2008年9月14日,也出现超过400架航班晚点或停航的故障.报道称,此次故障导致在羽田机场.大阪机场.那霸机

ORACLE RAC环境下节点自动重启问题总结

文章参考:主要来源于网络资源分享,并结合自己的ORACLE RAC环境近段时间OS节点自动重启问题进行分析总结 首先我们对能够导致节点重启的CRS进程进行介绍.1.ocssd : 它的主要功能是节点监控(Node Monitoring)和组管理(Group Management),它是CRS的核心进程之一.节点监控是指监控集群中节点的健康状况,监控的方法是通过网络心跳(network heartbeat)和磁盘心跳(disk heartbeat)实现的,如果集群中的节点连续丢失磁盘心跳或网络心跳

Oracle RAC 添加节点

1 安装准备工作 1.1 加节点步骤 加节点不需要停机,在线操作,但需要在业务较低时段进行,若安排重启测试和业务测试,则视情况申请停机时间. 1、 原生产库两台主机安装新的操作系统,连接现生产库所用的存储并进行多路径的配置 2、 配置网络 3、 检查系统包和配置等价性等一系列加节点操作,具体操作参考章节1.3~1.12 4、 在现有生产库节点1上进行加节点操作. 5、 检查各个节点的crs和instance的状态. 节点 节点名称 实例名称 数据库名称 处理器 R

Oracle RAC数据库掉电导致系统崩溃的恢复过程

这里简单记录一下,此次国庆加班恢复的某客户的2套Oracle RAC数据库,整个恢复过程中,2套rac差不多,因此这里以其中一套数据库的恢复过程为例进行简单分析说明.数据库由于为非归档,由于掉电导致重启之后系统无法正常open. 在正常open的过程中,报错如下错误: SQL> alter database open; alter database open * ERROR at line 1: ORA-00600: internal error code, arguments: [kcratr