当锁产生时,以下图为例说明
v$lock
:
1
、图中存在两个
session
分别是
133
和
135
,
session135
的
BLOCK=1
意味着该
session
拥有一个锁,并阻塞了其他
session
的对该锁的请求。该锁的类型由
TY
定义,
模式由
LMODE
字段定义;
2
、
session133
的
request=6
说明该
session
正在等待一个
lmode
为
6
的锁,而该锁
的拥有者正是
session135
。
3
、对于
TM
锁,
ID1Z
值就是加锁的段对象,可以是表或者表分区,此时
ID2
一般为
0
;
对于
TX
锁,这两个字段构成该事务在回滚段中的位置。
对于死锁的处理流程:
1,
查找锁:
select ls.osuser os_user_name,
ls.username user_name,
ls.type lock_type,
o.object_name object,
decode(ls.lmode,1,null,2,'Row Share',3,'Row Exclusive',4,'Share',5,'Share Row
Exclusive',6,'Exclusive',null) lock_mode,
o.owner,
ls.sid,
ls.serial# serial_num,
ls.id1,ls.id2,
ls.paddr
from sys.dba_objects o,
(select s.osuser,s.username,l.type,s.paddr,l.lmode,s.sid,s.serial#,l.id1,l.id2
from v$session s,v$lock l where s.sid=l.sid) ls
where o.object_id=ls.id1 and o.owner<>'SYS' order by o.owner,o.object_name
2
,查找
spid
select a.spid,a.username,b.program from v$process a,v$session b where
a.addr=b.paddr and a.addr='000007FF2DC8E578';
3
、
kill
进程
alter system kill session 'sid,serial#' immediate;
orakill sid spid
sid
:表示要杀死的进程属于的实例名
thread
:是要杀掉的线程号,即第
2
步查询出的
spid
。
评论