1.1 现象描述
查询数据库执行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进程企图再写锁时陷入无限等待。
1.2 可能原因
已经关闭的应用程序未提交的资源过多,PMON需要大量时间来处理回滚,导致无法处理并释放锁资源。
1.3 处理步骤
- 以oracle用户登录数据库所在机器。
- 以sysdba用户连接数据库。
- 查询进程的会话“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。
- 关闭此会话。
SQL> alter system kill session ‘137,5‘;
1.4 参考信息
PMON是进程监视器(Process Monitor)的缩写。PMON先执行回滚未提交的资源,然后再释放中断连接所持有的锁和其它资源。
Oracle数据库案例整理-Oracle系统运行时故障-无法释放已经结束的进程资源导致进程死锁,布布扣,bubuko.com