自己构想一个使用手工锁定解决一种业务需求的场景,并给出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
场景:手工锁定一个表,例如 我们在做一个秘密交易的时候,谈好的价格就不能变了,必须一手交钱一手交货完成交易,为了保证价格安全,我们先把价格表锁定,这期间不允许篡改,保证完成交易
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
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26686207/viewspace-750181/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26686207/viewspace-750181/