ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle LOCK内部机制及最佳实践系列(三)构想一个使用手工锁定解决一种业务需求的场景

Oracle LOCK内部机制及最佳实践系列(三)构想一个使用手工锁定解决一种业务需求的场景

原创 Linux操作系统 作者:leonarding 时间:2012-11-28 20:58:03 0 删除 编辑
自己构想一个使用手工锁定解决一种业务需求的场景,并给出SQL演示。

场景:手工锁定一个表,例如 我们在做一个秘密交易的时候,谈好的价格就不能变了,必须一手交钱一手交货完成交易,为了保证价格安全,我们先把价格表锁定,这期间不允许篡改,保证完成交易
LEO1@LEO1> lock table t1 in share mode;                                    手工锁定一个表,设置锁的级别为4
Table(s) Locked.
LEO1@LEO1> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;
       SID TYPE              ID1        ID2      LMODE    REQUEST      BLOCK
---------- ---------- ---------- ---------- ---------- ---------- ----------
       138 TM              73449          0          4          0          0             已经在T1表上加上了4号锁,除了当前会话外阻塞其他会话进行修改
LEO2@LEO1> insert into leo1.t1 values(5);                                   我们在会话leo2上插入一条记录,此时hang住了不动了
LEO1@LEO1> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;
       SID TYPE              ID1        ID2      LMODE    REQUEST      BLOCK
---------- ---------- ---------- ---------- ---------- ---------- ----------
       138 TM              73449          0          4          0          1     
       156 TM              73449          0          0          3          0
这就是由于我们加了4号锁除了当前会话外阻塞156会话进行修改,156会话默认可以获得一个3号锁,由于3号和4号互斥不能共存,所以没有获得锁,正在等待申请3号锁
LEO1@LEO1> commit;                                                                   锁跟着事务的结束而释放,commit   rollback都行
LEO1@LEO1> select sid,type,id1,id2,lmode,request,block from v$lock where type in ('TM','TX') order by 1,2;     此时没有锁信息了
no rows selected

Leonarding
2012.11.28
天津&winter
分享技术~成就梦想

Blog:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26686207/viewspace-750181/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
刘盛,香港城市大学EMBA,现担任中国民生银行民生科技供应链金融事业部负责人,负责企业生态业务发展工作。 2016年8月12日刘盛受邀参加了由磐岩智慧在上海绿地万豪大酒店主办的“全球互联网金融创新论坛2016”,并作了“中国互联网金融信用体系建设与未来”主题演讲。

注册时间:2012-02-10

  • 博文量
    254
  • 访问量
    3355109