Oracle 动态视图1 V$LOCK
v$lock显示数据库当前持有锁情况
Column | Datatype | Description |
SID | NUMBER | 会话ID |
TYPE | VARCHAR2(2) | 表示锁的类型。值包括TM,TX,等 |
ID1 | NUMBER |
对于TM锁:ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息; 对于TX锁:ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号 |
ID2 | NUMBER | 对于TM锁:ID2 值为0;对于TX锁:ID2 以十进制数值表示事务槽被重用的次数 |
LMODE | NUMBER | 持有锁模式: |
0 - none | ||
1 - null (NULL) | ||
2 - row-S (SS) | ||
3 - row-X (SX) | ||
4 - share (S) | ||
5 - S/Row-X (SSX) | ||
6 - exclusive (X) | ||
REQUEST | NUMBER | 申请锁模式: |
0 - none | ||
1 - null (NULL) | ||
2 - row-S (SS) | ||
3 - row-X (SX) | ||
4 - share (S) | ||
5 - S/Row-X (SSX) | ||
6 - exclusive (X) | ||
CTIME | NUMBER | 持有锁的时间 |
BLOCK | NUMBER | 是否正在阻塞其他会话锁申请 1:阻塞 0:不阻塞 |
示例展示:
会话1
1 --查看当前会话1持有锁情况 2 select sid,type,id1,id2,lmode,request,block 3 from v$lock 4 where sid in (select sid from v$mystat where rownum=1); 5 6 无记录 7 8 --加锁 9 select * from t1 for update ; 10 11 --查看加锁后的v$lock 12 SQL> select sid,type,id1,id2,lmode,request,block 13 2 from v$lock 14 3 where sid in (select sid from v$mystat where rownum=1); 15 16 SID TY ID1 ID2 LMODE REQUEST BLOCK 17 ---------- -- ---------- ---------- ---------- ---------- ---------- 18 133 TM 53252 0 3 0 0 19 133 TX 196630 636 6 0 0 20 21 --当前会话持有两种类型锁:TM(表级锁),TX(行级锁)。锁模式分别为:3,6。BLOCK为:0
会话2
1 --开启会话2 2 --查看当前会话2持有锁情况 3 select sid,type,id1,id2,lmode,request,block 4 from v$lock 5 where sid=140; 6 7 无记录 8 9 --加锁 10 select * from t1 for update ; 11 12 会话夯住了
切回会话1
1 --切换的会话1 查看两个会话持锁状态 2 SQL> select sid,type,id1,id2,lmode,request,block 3 2 from v$lock 4 3 where sid in (133,140); 5 6 SID TYPE ID1 ID2 LMODE REQUEST BLOCK 7 ---------- -- ---------- ---------- ---------- ---------- ---------- 8 133 TX 196630 636 6 0 1 9 133 TM 53252 0 3 0 0 10 140 TX 196630 636 0 6 0 11 140 TM 53252 0 3 0 0 12 SQL> 13 14 --会话133: TYPE(tm) lmode(3) block(0) 15 TYPE(tx) lmode(6) block(1) --在行级持有排它锁,并正在阻塞其它会话 16 17 --会话140:TYPE(tm) lmode(3) block(0) 18 TYPE(tx) request(6) block(0) --正在申请行级排它锁
相关锁的知识介绍:Oracle Lock 概述