问题描述:出现错误号为'ORA-04021 等待锁定对象..' 的错误信息
0.以dba身份登录数据库
一句等于下面三句SQL:
SELECT t.NAME,t2.SID,t2.SERIAL# FROM V$DB_OBJECT_CACHE t
JOIN v$access t1 ON t.NAME = t1.OBJECT
JOIN v$session t2 ON t1.SID = t2.SID
WHERE t.owner='CWT3_TAXI1' AND LOCKS!='0'
AND t.NAME = 'TAXI_TRANSACTION';
注:黑体下划线为变量
1.查找被锁的资源
SELECT * FROM V$DB_OBJECT_CACHE WHERE owner='CWT3_TAXI1' AND LOCKS!='0';
2.根据资源名查找此资源对应的SID
SELECT * FROM v$access WHERE owner='CWT3_TAXI1' AND OBJECT ='TAXI_TRANSACTION';
3.根据SID查找t.SERIAL#
SELECT t.SID,t.SERIAL# FROM v$session t WHERE t.SID = '496';
4.杀掉此SESSION
ALTER SYSTEM KILL SESSION '496,26791';(496:SID ; 26791:SERIAL#)
说明:如果在执行第4步的时候,出现"ORA-00031 ..." 错误,说明你在数据库中杀不了此进程
1.查找LINUX系统中,此资源对应的进程号
SELECT spid, osuser, s.program FROM v$session s,v$process p WHERE s.paddr=p.addr AND s.sid = '496';
2.在LINUX理把它kill掉
查看进程:ps -ef|more
杀掉进程:kill -9 进程号
5.OK,大功告成