暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库无法释放已经结束的进程资源导致进程死锁

原创 huawei 2021-03-02
474

数据库无法释放已经结束的进程资源导致进程死锁

现象描述

查询数据库执行SQL语句的进程状态,发现执行SQL语句进程死锁,系统显示如下信息:

SQL> select address,sql_text,piece,SECONDS_IN_WAIT,SERVICE_NAME,MACHINE,PROCESS,LOCKWAIT from v$session,v$sqltext where address=sql_address and sql_text like '%FM_%' order by address,piece;

ADDRESS  SQL_TEXT                                                         SECONDS_IN_WAIT SERVICE_NAME              PROCESS                  LOCKWAIT
-------- ---------------------------------------------------------------- --------------- ----------------------------------------------------------- 
761BA4D0 DELETE FROM NE5_1.TBL_FM_ALARM_LOG WHERE ROWID IN (SELECT ROWID             7807 omu                       22927                    AEC028A8
761BA4D0 FROM (SELECT ROWID FROM NE5_1.TBL_FM_ALARM_LOG             WHERE            7807 omu                       22927                    AEC028A8
9AB0B8F8 ress=sql_address and sql_text like '%FM_%' order   by   address,               0 SYS$USERS                 27667
A311D7E4 UPDATE NE5_1.TBL_FM_ALARM_LOG                                 SE            7658 omu                       29835                    AEC027C0
复制
由以上显示信息可知,22927进程先进入写锁状态,29835进程企图再写锁时陷入无限等待。

可能原因

已经关闭的应用程序未提交的资源过多,PMON需要大量时间来处理回滚,导致无法处理并释放锁资源。

处理步骤

  1. oracle用户登录数据库所在机器。
  2. sysdba用户连接数据库。
  3. 查询进程的会话“ID”“SERIAL”

    SQL> select sess.sid,sess.serial# from v$session sess,v$process proc where sess.paddr=proc.addr and proc.spid='22927';

    系统提示如下信息:
           SID    SERIAL#
    ---------- ----------
           137          5
    
    复制
    由以上显示信息可知,进程22927的会话ID为137,SERIAL为5。
  4. 关闭此会话。

    SQL> alter system kill session '137,5';

参考信息

PMON是进程监视器(Process Monitor)的缩写。PMON先执行回滚未提交的资源,然后再释放中断连接所持有的锁和其它资源。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论