Oracle LOCK内部机制及最佳实践系列(三)构想一个使用手工锁定解决一种业务需求的场景
2012-11-28 23:28
597 查看
自己构想一个使用手工锁定解决一种业务需求的场景,并给出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
[b]Leonarding[/b]
2012.11.28
天津&winter
分享技术~成就梦想
Blog:www.leonarding.com
本文出自 “刘盛分享技术~成就梦想” 博客,请务必保留此出处http://leonarding.blog.51cto.com/6045525/1073549
场景:手工锁定一个表,例如 我们在做一个秘密交易的时候,谈好的价格就不能变了,必须一手交钱一手交货完成交易,为了保证价格安全,我们先把价格表锁定,这期间不允许篡改,保证完成交易
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
[b]Leonarding[/b]
2012.11.28
天津&winter
分享技术~成就梦想
Blog:www.leonarding.com
本文出自 “刘盛分享技术~成就梦想” 博客,请务必保留此出处http://leonarding.blog.51cto.com/6045525/1073549
相关文章推荐
- 构想一个使用手工锁定解决一种业务需求的场景
- Oracle LOCK内部机制及最佳实践系列(二)模拟RI锁定导致阻塞的场景,并分析v$lock
- Oracle LOCK内部机制及最佳实践系列(五)给出一个导致死锁的SQL示例
- Oracle LOCK内部机制及最佳实践系列(一)分别模拟insert|update|delete造成阻塞及说明
- Oracle LOCK内部机制及最佳实践系列(四)深入分析mode 2-6 的TM锁相互间的互斥关系
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
- ASP.NET 计划任务,使用.net内部机制,解决应用池回收问题
- 使用用例捕获业务需求(业务需求的7个实践原则)
- MEMCACHED的最佳实践和内部机制(译)
- 项目管理系列分享(六)——最佳实践-需求
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
- MEMCACHED的最佳实践和内部机制(译)
- 商务参考体系结构:企业对消费者(B2C电子商务解决实践) 第 1 章:业务需求和设计模型
- 打造立体化监控体系与APM最佳实践系列 --Zipkin部署与使用
- Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结
- Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结
- 在ATMEL sam系列中使用fromelf命令生成bin文件却生成了一个文件夹原因及解决
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
- 商务参考体系结构:企业对消费者(B2C电子商务解决实践) 第 1 章:业务需求和设计模型
- 商务参考体系结构:企业对消费者(B2C电子商务解决实践) 第 1 章:业务需求和设计模型