专栏首页数据和云Oracle 12c因bug导致ORA-04031问题处理过程 | 云和恩墨技术通讯精选

Oracle 12c因bug导致ORA-04031问题处理过程 | 云和恩墨技术通讯精选

各位亲爱的用户/读者朋友们:

为了及时共享行业案例,通告共性问题,达成知识共享和提前预防,我们整理和编辑了《云和恩墨技术通讯》(8月刊),通过对过去一段时间的知识回顾和故障归纳,以期提供有价值的信息供大家参考。 同时,我们也希望能够将热点事件、新的产品特性及其他有价值的信息聚集起来,为您提供具有前瞻性的支持信息,保持对于当前最新的数据库新闻和事件的了解,其中包括重要数据库产品发布、警报、更新、新版本、补丁等。

本期目录:

  • 新闻:2019年8月数据库流行度排行
  • 警示:12.1.2.0与11.2.0.4通过DB Link查询触发BUG 17890099
  • 警示:Oracle 12c因bug导致ORA-04031
  • 警示:ORA-00600 2252 错误正在SCN问题下不断爆发
  • 经验:12c多租户实例意外宕机处理
  • 经验:记一次tuxedo crash的故障处理
  • 问题:故障排除之enq:TX - index contention等待事件
  • 公告:墨天轮DBASK技术专家邀请函

抢先下载:https://www.modb.pro/doc/572(复制链接浏览器中打开,或者点击“阅读原文”)

部分精选-Oracle 12c因bug导致ORA-04031(姜劲松)


ORA-04031这个错误,几乎每一个专业的DBA都遇到过。这是一个相当严重的错误,Oracle进程在向SGA申请内存时,如果申请失败,则会抛出这个错误,大部分情况下是在向SGA中的shared pool申请内存时失败。在Oracle 12.1.0.2及以后版本中,有可能是因为触发了bug 26405036 Large Allocation Of "ges enqueues" and "ges resource dynamic" In The Shared Pool导致数据库shared pool内存爆满引发ORA-04031报错,这个bug在19.1版本上已经修复,针对12.2的版本需打上相应的补丁进行修复。

问题描述

在7月17日上午11时10左右,某客户收到告警短信,提示数据库(12.2的三节点RAC环境)的2号节点宕机,当即登陆该节点进行查看,发现数据库状态正常,但日志里出现大量的ORA-04031报错,提示无法分配shared_pool,手动执行shared pool刷新脚本进行刷新,刷新后shared pool使用率仍然为70%左右。此时有业务反馈数据库节点3无法连接,客户决定对节点3进行重启,重启后恢复正常,经过后续观察,节点2 的ORA-04031报错也再没有出现。

问题分析

查看当时节点二的告警日志,发现日志中抛出ORA-04031报错信息

节点三10:49就开始报ORA-04031,直到11:51被手动停止实例

所以故障原因最早是节点三实例导致的,查看4031 的dump trace文件,在heapdump发现ges resource dynamic/ges enqueues异常高:

查看这2个pool的变化趋势,发现ges resource dynamic/ges enqueues一直在持续增长: 1. 故障前ges enqueues达到17GB,重启后恢复为3.8GB,但后续还是会增长; 2. 故障前ges resource dynamic高达22GB(2个子池),重启后4.8GB,后续0718 06:00新增1个1.2GB子池并持续增长。

问题解决

根据该故障现象,查询MOS发现:Bug 26405036 Large Allocation Of "ges enqueues" and "ges resource dynamic" In The Shared Pool。

且该bug出现的数据库版本和本库匹配(本库版本Linux 12.2.0.1,fix在19.1.0才包含),现象也匹配。《》

建议解决措施: 1. 针对12.2版本,通过应用补丁Patch 26405036: VERY HIGH "GES ENQUEUES" ON THE SHARED POOL得到解决。 2. 针对12.2版本,workaround可以在出现问题时临时使用如下命令清理内存(后续还是会增长):

SQL> oradebug setmypid
SQL> oradebug lkdebug -m reconfig lkdebug

3. 针对12.1版本,建议重启实例。

本文分享自微信公众号 - 数据和云(OraNews),作者:盖国强

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 性能优化:认识B树索引分裂

    黄玮(Fuyuncat) 黄玮(Fuyuncat),资深 Oracle DBA,从事Oracle数据库管理、维护与开发工作十余年,有丰富的大型数据库设计、开发...

    数据和云
  • GR运维手册 - 第一册 苦海岸边,GR的基础知识

    作者简介: ? 刘伟 云和恩墨开源解决方案事业部首席架构师 多年一线互联网企业DBA经历,对MySQL、NoSQL,PostgreSQL等各类开源数据库均有涉猎...

    数据和云
  • 深入剖析 Group Replication内核的引擎特性

    小编寄语 主库master与从库slave的切换不管是主动的还是被动的都需要外部干预才能进行,这与数据库内核本身是按照单机来设计的理念悉悉相关,并且数据库系统本...

    数据和云
  • 一篇文章讲透MySQL为什么要用B+树实现索引

    索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从...

    用户1260737
  • 再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她

    索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从...

    Java3y
  • B树?这篇文章彻底看懂了!

    索引,相信大多数人已经相当熟悉了,很多人都知道 MySQL 的索引主要以 B+ 树为主,但是要问到为什么用 B+ 树,恐怕很少有人能把前因后果讲述完整。本文就来...

    程序员追风
  • 不准犹豫!再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她

    索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从...

    帅地
  • 深入Redis 主从复制原理

    1、从节点执行 slaveof 命令 2、从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制 3、从节点内部的...

    黄泽杰
  • 不相交集类

    用户1653704
  • 弱弱地写了一篇前端教程

    分享一篇最近学习总结的前端表格制作教程,先看下方截图,具体演示的功能虽然简单,不过很有实际意义,主要涵盖表格展示数据、删除数据、修改数据、分页、模态窗等常见功能...

    Rare0716

扫码关注云+社区

领取腾讯云代金券