构想一个使用手工锁定解决一种业务需求的场景

来源:互联网 发布:linux修复系统 编辑:程序博客网 时间:2024/05/18 13:09
网上交易时比如货物有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.