select * from V$DB_OBJECT_CACHE where owner='数据库用户名' AND LOCKS!='0'
2、依据被锁的过程的条件 查询sid,SERIAL#
SELECT SID,SERIAL#,PADDR,event,logon_time,status FROM V$SESSION WHERE SID in (select SID from V$ACCESS WHERE object='被锁的过程' and username='数据库用户名') and status='ACTIVE' ;
3、批量杀死进程
declare cursor mycur is
SELECT SID,SERIAL#,PADDR,event,logon_time,status FROM V$SESSION WHERE SID in (select SID from V$ACCESS WHERE object='被锁的过程' and username='数据库用户名') and status='ACTIVE' ;begin
for cur in mycur
loop
execute immediate ( 'alter system kill session '''||cur.sid || ','|| cur.SERIAL# ||''' ');
end loop;
end;
4、批量杀死出现ORA-00030: 用户会话 ID 不存在。需要单个杀一遍,全部杀一遍后,执行第5、6步操作
alter system kill session 'SID,SERIAL#'
5、如果出现status为killed的情况进行如下操作,查询SPID
select a.SID,a.SERIAL#,b.SPID from v$session a,v$process b where a.SID in (select SID from V$ACCESS WHERE object='被锁过程' and status='KILLED') and a.PADDR=b.ADDR
6、登陆xshell连接数据库服务器 依据root权限杀进程
kill -9 SPID
1、建议第2、5步所列查询语句多执行几下,存在信息就需要杀死
2、如果是RAC数据库,连接xshell进入rac的单例库