代码改变世界

2017-06-12 12:34  tlnshuju  阅读(171)  评论(0编辑  收藏  举报

1.查看当前锁对象
   select a.owner,
a.object_name,
b.xidusn,
b.xidslot,
b.xidsqn,
b.session_id,
b.oracle_username,
b.os_user_name,
b.process,
b.locked_mode,
c.machine,
c.status,
c.server,
c.sid,
c.serial#,
c.program
from all_objects a,
v$locked_object b,
v$session c
where ( a.object_id = b.object_id )
and (b.process = c.process )
order by 1,2;

依据查询到的session_sid查询出session的具体信息:

select saddr,sid,serial#,paddr,username,status from v$session where sid='764';

假设确保此lock无效,能够kill掉该session

alter system kill session ’sid,serial#’ ; 

【注】以上两步,能够通过Oracle的管理控制台来运行。
假设出现题目的错误,能够
select a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status='KILLED';

3.假设利用上面的命令杀死一个进程后。进程状态被置为"killed"。可是锁定的资源非常长时间没有被释放,那么能够在os一级再杀死对应的进程(线程)。首先运行以下的语句获得进程(线程)号:
select spid, osuser, s.program from v$session s,v$process p where
s.paddr=p.addr and s.sid=785 (33就是上面的sid)

4.在OS上杀死这个进程(线程):
1)在unix上,用root身份运行命令:
#kill -9 12345(即第3步查询出的spid)