構想一個使用手工鎖定解決一種業務需求的場景

還不算暈發表於2013-10-28
網上交易時比如貨物有3件,在購買時需要按購買數量進行鎖定。
BYS@dg2>lock table t in share mode;手工鎖定一個表,設定鎖的級別為4

Table(s) Locked.
 已經在T表上加上了4號鎖,除了當前會話外阻塞其他會話進行修改
BYS@dg2> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;

       SID TY        ID1        ID2      LMODE    REQUEST      BLOCK
---------- -- ---------- ---------- ---------- ---------- ----------
        36 TM      75052          0          4          0          0
此時在會話2插入資料,
BYS@dg2>select distinct sid from v$mystat;

       SID
----------
        44
BYS@dg2>insert into t values(333);   hang住
此時返回會話1上進行查詢:
BYS@dg2> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;

       SID TY        ID1        ID2      LMODE    REQUEST      BLOCK
---------- -- ---------- ---------- ---------- ---------- ----------
        36 TM      75052          0          4          0          1
        44 TM      75052          0          0          3          0
        44會話預設可以獲得一個3號鎖,由於3號和4號互斥不能共存,所以沒有獲得鎖,正在等待申請3號鎖
BYS@dg2>commit;

Commit complete.

相關文章