重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 398|回复: 0
打印 上一主题 下一主题

[Oracle] Oracle数据库ora-4025 Error的处理

[复制链接]
跳转到指定楼层
楼主
发表于 2025-10-12 21:31:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、问题分析

最近业务上报了一个错误,4025:
ORA-04025: maximum allowed library objectlock allocated for sql1

我们看下4025是一个什么错误:
$ oerrora 4025
04025, 00000, "maximum allowed library object lock allocated for %s%s%s%s%s"
// *Cause: Too many active locks for the object has been allocated. This error
//         can be a result of too many cursors kept open per session.
// *Action: Close cursors, reduce session_cached_cursors value.
通过上面的解释 我们可以看到 分配给这个对象上的active locks 太多了。
由于每个session打开的游标数太多超过了library object lock allocated的上限(通常active lock的上限值是65536),故产生了4025的报错。


二、问题解决方案

2.1 解决方案
关闭游标或者减少session_cached_cursors的值。
那为什么减少session_cached_cursors的值可以缓解4025问题的发生?
因为客户端执行sql时,相关的cursor会缓存在session_cached_cursors中。当客户端关闭游标时,有部分cursor会缓存在数据库的session_cached_cursors中,不被数据库清理,故减少session_cached_cursors的值会缓解4025问题的发生。
2.2 应急处理
那真的出现4025错误时,我们如何应急处理呐?
一种办法是应用程序关闭,这种肯定不太符合业务场景。
另一种方式就是数据库kill 相关的session。
可是我们如何才能准确的定位到相关的session id?
如果通过查询gv$session视图,通过执行的sql_id或者prev_sql_id是无法定位到执行的session_id的,因为此时事务已经执行完成了,会话状态处于sleep状态中了,但是没有释放游标,此时我们可以通过以下sql定位:
with sq as
        (select/*+ materialize */sid,serial#, program, saddr, event
            ,to_char(p1, 'xxxxxxxxxxxxxxx') p1, p1text
            ,to_char(p2, 'xxxxxxxxxxxxxxx') p2, p2text
            ,to_char(p3, 'xxxxxxxxxxxxxxx') p3, p3text
         from v$session
        )
      selectdistinct'alter system kill session ''' ||s.sid||','||s.serial#||''' immediate;'
        from v$libcache_locks l, x$kglob o, sq s
       where1= 1
         and o.kglnahsh in (&SQL HASH_VALUE)   --  这里是SQL HASH_VALUE,通过执行的sql找到对应的sql_hash_value即可
         and l.object_handle = o.kglhdadr
         and l.holding_user_session = s.saddr;

如果是rac环境,在多个节点上执行该sql即可查出相关节点上的session。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-17 21:21 , Processed in 0.228867 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表