欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

程序员文章站 2022-05-20 10:51:13
...

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$lock

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)