1)查看當前的用戶會話和對應的鎖信息
select s.sid,s.SERIAL#,s.USERNAME,s.STATUS,l.ID1,l.LMODE,l.REQUEST
from v$session s,v$lock l
where s.SID=l.SID and s.USERNAME is not null;
from v$session s,v$lock l
where s.SID=l.SID and s.USERNAME is not null;
說明:
a. username字段爲空-------後臺進程會話
b. request字段-----------會話申請的鎖類型
-
0
- none -
1
- null (NULL) -
2
- row-S (SS) -
3
- row-X (SX) -
4
- share (S) -
5
- S/Row-X (SSX) -
6
- exclusive (X)
c. lmode字段-----------會話持有鎖類型
-
0
- none -
1
- null (NULL) -
2
- row-S (SS) -
3
- row-X (SX) -
4
- share (S) -
5
- S/Row-X (SSX) -
6
- exclusive (X)
2)查看造成鎖等待的鎖的信息
select l.ID1,l.LMODE,l.REQUEST
from v$session s,v$lock l
where s.LOCKWAIT=l.KADDR;
from v$session s,v$lock l
where s.LOCKWAIT=l.KADDR;
3)查找造成鎖等待的會話信息
select s.SID,s.SERIAL#
from v$session s,v$lock l
where l.ID1 in (select distinct l2.ID1 from v$session s2,v$lock l2 where s2.LOCKWAIT=l2.KADDR)
and s.SID=l.SID and l.LMODE<>0;
from v$session s,v$lock l
where l.ID1 in (select distinct l2.ID1 from v$session s2,v$lock l2 where s2.LOCKWAIT=l2.KADDR)
and s.SID=l.SID and l.LMODE<>0;
4)kill掉不釋放鎖的會話
alter system kill session 'sid,serial#'; --sid,serial# 爲3)中查詢