1、查询死锁会话
select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
或者
select saddr,sid,serial#,paddr,username,status from v$session where username =upper('etl')
or username =upper('sys');
2、kill掉相应的会话
alter system kill session '456,1589'; (其中456,1589分别是上面查询出的sid,serial#)
3、附加
第二部执行完之后 再去执行第一步查看是否还有死锁会话(进程状态被置为”killed”),因为锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程)
--获得进程(线程)号,456是上面的sid
select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=456
在unix上,用root身份执行命令:
kill -9 4268(即第3步查询出的spid)
在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill Servicename spid
其中:
servicename :数据库的servicename
spid:是要杀掉的线程号,即上面查询出的spid。
eg:orakill orcl 4268