Oracle数据库之V$LOCK

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:表示锁的类型。值包括TMTX等。

l         LMODE:表示会话等待的锁模式的信息。用数字06表示,和表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时,表示当前会话被阻塞,其它会话占有改锁的模式

猜你喜欢

转载自gaojingsong.iteye.com/blog/2280701
今日推荐