当前位置: 首页 > news >正文

故障诊断:奇怪的ORA-01000故障处理

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

来自一位兄弟的案例分享,某银行的某系统rac数据库版本19.6,二节点的mmon slave进程一直在报ORA-01000,导致awr、ash等等很多MMON的功能收到了影响。

2021-11-05T14:38:50.244256+08:00
Errors in file /u01/app/oracle/diag/rdbms/rcg02/rcg022/trace/rcg022_m002_65032.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
2021-11-05T14:53:51.739041+08:00
Errors in file /u01/app/oracle/diag/rdbms/rcg02/rcg022/trace/rcg022_m000_64999.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-00604: error occurred at recursive SQL level 1

查询v$open_cursor,发现每个m00n的session都open了很多同一个递归sql,cursor type为OPEN-RECURSIVE:

select ts# from ts$ where bitmapped <> 0 and contents$ <> 1 and online$=1 and ts# >= :1 order by ts# asc

并且发现rac的所有节点,就只有2节点的异常

SQL> select a.inst_id,program,ADDRESS,CHILD_ADDRESS,a.sql_id,count(*) from gv$open_cursor a,gv$session b2   where a.inst_id=b.inst_id and a.sid=b.sid and b.program like '%M00%'3   group by a.inst_id,program,ADDRESS,CHILD_ADDRESS,a.sql_id having count(*)>10;INST_ID PROGRAM                                          ADDRESS          CHILD_ADDRESS    SQL_ID          COUNT(*)
---------- ------------------------------------------------ ---------------- ---------------- --------------- ----------2 oracle@mgmrcgarac02 (M004)                       000000063F2A95B0 000000063F2A8188 38hpmnhjywkz4      9952 oracle@mgmrcgarac02 (M005)                       000000063F2A95B0 000000063F2A8188 38hpmnhjywkz4      9952 oracle@mgmrcgarac02 (M002)                       000000063F2A95B0 000000063F2A8188 38hpmnhjywkz4      9952 oracle@mgmrcgarac02 (M000)                       000000063F2A95B0 000000063F2A8188 38hpmnhjywkz4      9942 oracle@mgmrcgarac02 (M003)                       000000063F2A95B0 000000063F2A8188 38hpmnhjywkz4      9982 oracle@mgmrcgarac02 (M001)                       000000063F2A95B0 000000063F2A8188 38hpmnhjywkz4      995这非常不正常,通常每个session不会一直open同一个递归cursor,怀疑是这些递归sql在运行结束都没有关闭游标。为了更好的分析问题,对M000进程做了一个processstate dump
SQL> oradebug setospid 64999;
Oracle pid: 74, Unix process pid: 64999, image: oracle@mgmrcgarac02 (M000)
SQL> oradebug dump processstate 266;
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/rcg02/rcg022/trace/rcg022_m000_64999.trc
从dump中发现确实同时打开了多个该cursor,单对某个LIBRARY CACHE LOCK进行分析,发现session以NULL模式持有该sql父游标handle的library cache lock,说明已经打开了游标。SO: 0x61a4b63a8, type: LIBRARY OBJECT LOCK (118), map: 0x448394090state: LIVE (0x4532), flags: 0x1owner: 0x86ffdc2f8, proc: 0x86fef8078link: 0x61a4b63c8[0x61e0f7ae8, 0x61e0ef1e8]child list count: 0, link: 0x61a4b6418[0x61a4b6418, 0x61a4b6418]conid: 1, conuid: 1, SGA version=(1,0), pg: 0SOC: 0x448394090, type: LIBRARY OBJECT LOCK (118), map: 0x61a4b63a8state: LIVE (0x99fc), flags: INIT (0x1)LibraryObjectLock:  Address=0x448394090 Handle=0x63f2a95b0 Mode=N CanBeBrokenCount=1 Incarnation=1 ExecutionCount=1 User=0x863b17220 Session=0x863b19a08 ReferenceCount=1 Flags=CNB/[0001] SavepointNum=c21c50 Time=09/02/2021 03:04:59 LibraryHandle:  Address=0x63f2a95b0 Hash=23ee4be4 LockMode=N PinMode=0 LoadLockMode=0 Status=VALD ObjectName:  Name=select ts# from ts$ where bitmapped <> 0 and  contents$ <> 1 and online$=1 and ts# >= :1 order by ts# asc 游标打开时间09/02/2021 03:04:59,两个月前。。。。,并且对应的子游标handle的状态已经失效了SO: 0x61e0ef1c8, type: LIBRARY OBJECT LOCK (118), map: 0x44b1ca9b0state: LIVE (0x4532), flags: 0x1owner: 0x86ffdc2f8, proc: 0x86fef8078link: 0x61e0ef1e8[0x61a4b63c8, 0x86ffdc368]child list count: 0, link: 0x61e0ef238[0x61e0ef238, 0x61e0ef238]conid: 1, conuid: 1, SGA version=(1,0), pg: 0SOC: 0x44b1ca9b0, type: LIBRARY OBJECT LOCK (118), map: 0x61e0ef1c8state: LIVE (0x99fc), flags: INIT (0x1)LibraryObjectLock:  Address=0x44b1ca9b0 Handle=0x63f2a8188 Mode=N CanBeBrokenCount=1 Incarnation=1 ExecutionCount=33565358 Context=0x7f44760c4f80 User=0x863b17220 Session=0x863b19a08 ReferenceCount=1 Flags=BRO/CBK/[0020] SavepointNum=0 Time=09/02/2021 03:04:59 LibraryHandle:  Address=0x63f2a8188 Hash=0 LockMode=N PinMode=S LoadLockMode=0 Status=INVL 
说明sql早已执行完成,但是游标并未关闭。

解决该问题的方法很简单,就是关闭session,由于m00n进程是mmon的slave进程,可以随便kill,kill之后问题解决。但是并没有找到该问题的原因,MOS上也没有查到相关的案例,个人怀疑是在关闭递归游标的时候出现了异常,导致反复的打开该游标。

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

http://www.jsqmd.com/news/10946/

相关文章:

  • 2025 年全屋定制厂家最新推荐排行榜:聚焦 ENF 级环保与优质服务力,权威甄选品牌助消费者精准选择
  • 大三上 需求与商业模式创新 作业1的设想:如何评价
  • C/C++逆向分析实战:变量存储与安全防护全攻略
  • 穿透式监管合规:政府投资基金数字化报送实践(璞华公开课第4期活动回顾)
  • 国产项目管理工具Gitee:数字化转型浪潮中的本土化破局者
  • 2025年磁翻板液位计生产商,制造商哪家好?生产厂家推荐这家!
  • IIS8.5 安装证书
  • 2025南通婚纱摄影厂家最新推荐榜:匠心工艺与浪漫美学完美结合
  • 免费音乐软件,哔哔音乐 免费下载及安装!免费音乐播放器
  • 多级缓存架构:性能与数据一致性的平衡处理(原理及优势详解+项目实战) - 教程
  • 微信社群开发
  • mysql设置最大连接数,MySQL最大连接数设置详解
  • c# 读取xml到datagridview
  • 微信机器人API开放!手把手教你打造智能聊天机器人
  • 十二重计数法
  • KLT就是Android中开一个线程是ULT还
  • Java高手速成--吃透源码+手写组件+定制开发
  • 【Excel】账单数据分析(数据透视表的简单应用)
  • CSP/NOIP 历年题解导引
  • 记一次Windows 10 无法打开计算器、照片等系统自带小工具问题解决
  • lca(倍增)
  • 数据库设计原则文档 - 指南
  • AI元人文:创新空间的深度探索与未来蓝图
  • 光流估计(可用于目标跟踪) - 教程
  • Redis 64字节分界线与跳表实现原理 - 实践
  • VUE---await的运用
  • 基于最小二乘(LS)信道估计的MATLAB实现
  • 2025焊接件加工制造厂家口碑最新推荐榜:实力工艺与市场口碑
  • 完整教程:计算机环境、用户与系统变量
  • 2025舒适轮胎最新推荐榜:卓越减震与静音性能的驾乘体验之选