SQL> create table t(name number(5));
Table created.
一、创建表,插入记录时候不执行Commit操作场景如下:
SQL> insert into t values(1);
1 row created.
?
SQL> select * from v$lock;
ADDR ? ? KADDR ? ? ? ? ? SID TY ? ? ? ?ID1 ? ? ? ?ID2 ? ? ?LMODE ? ?REQUEST ? ? ?CTIME ? ? ?BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
41BB9830 41BB9844 ? ? ? ?165 XR ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ?571 ? ? ? ? ?0
41BB988C 41BB98A0 ? ? ? ?165 CF ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?2 ? ? ? ? ?0 ? ? ? ?563 ? ? ? ? ?0
41BB98E8 41BB98FC ? ? ? ?167 PW ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ?552 ? ? ? ? ?0
41BB9944 41BB9958 ? ? ? ?165 RS ? ? ? ? 25 ? ? ? ? ?1 ? ? ? ? ?2 ? ? ? ? ?0 ? ? ? ?560 ? ? ? ? ?0
41BB99FC 41BB9A10 ? ? ? ?166 RT ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ? ?6 ? ? ? ? ?0 ? ? ? ?560 ? ? ? ? ?0
41BB9B10 41BB9B24 ? ? ? ?164 TS ? ? ? ? ?3 ? ? ? ? ?1 ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ?548 ? ? ? ? ?0
41BB9B6C 41BB9B80 ? ? ? ?167 MR ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?554 ? ? ? ? ?0
41BB9BC8 41BB9BDC ? ? ? ?167 MR ? ? ? ? ?2 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?554 ? ? ? ? ?0
41BB9C24 41BB9C38 ? ? ? ?167 MR ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?554 ? ? ? ? ?0
41BB9C80 41BB9C94 ? ? ? ?167 MR ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?554 ? ? ? ? ?0
41BB9CDC 41BB9CF0 ? ? ? ?167 MR ? ? ? ?201 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?554 ? ? ? ? ?0
ADDR ? ? KADDR ? ? ? ? ? SID TY ? ? ? ?ID1 ? ? ? ?ID2 ? ? ?LMODE ? ?REQUEST ? ? ?CTIME ? ? ?BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
405C3F90 405C3FA8 ? ? ? ?143 TM ? ? ?51153 ? ? ? ? ?0 ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ? ?6 ? ? ? ? ?0
40624F00 4062501C ? ? ? ?143 TX ? ? 458753 ? ? ? ?264 ? ? ? ? ?6 ? ? ? ? ?0 ? ? ? ? ?6 ? ? ? ? ?0
?
13 rows selected.
SQL> commit;
二、执行for update查询时候
SQL> select * from t for update;
? ? ? NAME
----------
?
?
SQL> select * from v$lock;
?
ADDR ? ? KADDR ? ? ? ? ? SID TY ? ? ? ?ID1 ? ? ? ?ID2 ? ? ?LMODE ? ?REQUEST ? ? ?CTIME ? ? ?BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
41BB9830 41BB9844 ? ? ? ?165 XR ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ?634 ? ? ? ? ?0
41BB988C 41BB98A0 ? ? ? ?165 CF ? ? ? ? ?0 ? ? ? ? ?0 ? ? ? ? ?2 ? ? ? ? ?0 ? ? ? ?626 ? ? ? ? ?0
41BB98E8 41BB98FC ? ? ? ?167 PW ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ?615 ? ? ? ? ?0
41BB9944 41BB9958 ? ? ? ?165 RS ? ? ? ? 25 ? ? ? ? ?1 ? ? ? ? ?2 ? ? ? ? ?0 ? ? ? ?623 ? ? ? ? ?0
41BB99FC 41BB9A10 ? ? ? ?166 RT ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ? ?6 ? ? ? ? ?0 ? ? ? ?623 ? ? ? ? ?0
41BB9B10 41BB9B24 ? ? ? ?164 TS ? ? ? ? ?3 ? ? ? ? ?1 ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ?611 ? ? ? ? ?0
41BB9B6C 41BB9B80 ? ? ? ?167 MR ? ? ? ? ?1 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?617 ? ? ? ? ?0
41BB9BC8 41BB9BDC ? ? ? ?167 MR ? ? ? ? ?2 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?617 ? ? ? ? ?0
41BB9C24 41BB9C38 ? ? ? ?167 MR ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?617 ? ? ? ? ?0
41BB9C80 41BB9C94 ? ? ? ?167 MR ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?617 ? ? ? ? ?0
41BB9CDC 41BB9CF0 ? ? ? ?167 MR ? ? ? ?201 ? ? ? ? ?0 ? ? ? ? ?4 ? ? ? ? ?0 ? ? ? ?617 ? ? ? ? ?0
?
ADDR ? ? KADDR ? ? ? ? ? SID TY ? ? ? ?ID1 ? ? ? ?ID2 ? ? ?LMODE ? ?REQUEST ? ? ?CTIME ? ? ?BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
405C3F90 405C3FA8 ? ? ? ?143 TM ? ? ?51153 ? ? ? ? ?0 ? ? ? ? ?3 ? ? ? ? ?0 ? ? ? ? ?3 ? ? ? ? ?0
40624F00 4062501C ? ? ? ?143 TX ? ? 327703 ? ? ? ?214 ? ? ? ? ?6 ? ? ? ? ?0 ? ? ? ? ?3 ? ? ? ? ?0
?
13 rows selected.
?
?
?
V$LOCK中的常用列
l?????????SID:表示持有锁的会话信息。
l?????????TYPE:表示锁的类型。值包括TM和TX等。
l?????????LMODE:表示会话等待的锁模式的信息。用数字0-6表示,和表1相对应。
l?????????REQUEST:表示session请求的锁模式的信息。
l?????????ID1,ID2:表示锁的对象标识。
?
1.关于V$lock表和相关视图的说明
Column Datatype Description
ADDR RAW(4 | 8) Address of lock state object
KADDR RAW(4 | 8) Address of lock
SID NUMBER Identifier for session holding or acquiring the lock
TYPE VARCHAR2(2) Type of user or system lock
The locks on the user types are obtained by user applications. Any process that is blocking others is likely to be holding one of these locks. The user type locks are:
TM - DML enqueue?
TX - Transaction enqueue
UL - User supplied
--我们主要关注TX和TM两种类型的锁
--UL锁用户自己定义的,一般很少会定义,基本不用关注
--其它均为系统锁,会很快自动释放,不用关注
ID1 NUMBER Lock identifier #1 (depends on type)
ID2 NUMBER Lock identifier #2 (depends on type)
---当lock type 为TM时,id1为DML-locked object的object_id
---当lock type 为TX时,id1为usn+slot,而id2为seq。
--当lock type为其它时,不用关注
LMODE NUMBER Lock mode in which the session holds the lock:
0 - none
1 - null (NULL)
2 - row-S (SS)
3 - row-X (SX)
4 - share (S)
5 - S/Row-X (SSX)
6 - exclusive (X)
oracle官网--大于0时表示当前会话以某种模式占有该锁,等于0时表示当前会话正在等待该锁资源,即表示该会话被阻塞。
--往往在发生TX锁时,伴随着TM锁,比如一个sid=9会话拥有一个TM锁,一般会拥有一个或几个TX锁,但他们的id1和id2是不同的,请注意
REQUEST NUMBER Lock mode in which the process requests the lock:
0 - none
1 - null (NULL)
2 - row-S (SS)
3 - row-X (SX)
4 - share (S)
5 - S/Row-X (SSX)
6 - exclusive (X)
--大于0时,表示当前会话被阻塞,其它会话占有改锁的模式
?
原文:http://gaojingsong.iteye.com/blog/2280701