ITPUB??ì3
ITPUB论坛 » Oracle数据库管理 » 请教一个刚遇到的关于lock的问题

标题: [体系架构] 请教一个刚遇到的关于lock的问题
离线 net pinaster
游侠


精华贴数 0
个人空间 0
技术积分 256 (8366)
社区积分 1 (43170)
注册日期 2005-8-4
论坛徽章:4
生肖徽章2007版:猪生肖徽章2007版:猪生肖徽章2007版:牛ITPUB新首页上线纪念徽章  
      

发表于 2007-12-6 23:19 
请教一个刚遇到的关于lock的问题

请教一个刚遇到的关于lock的问题。
用sql plus 分别开了三个session,然后对同一个表进行下面的操作:
session 1:
SQL> lock table test.test0001 in exclusive mode;

表已锁定。

session 2:
SQL> insert into test.test0001(lsh) values(1);

session 3:
SQL> insert into test.test0001(lsh) values(2);

然后,释放session 1 的锁
SQL> rollback;

回退已完成。

此时session 2的反应为
SQL> insert into test.test0001(lsh) values(1);

已创建 1 行。

但是session 3 仍然在等待锁,为什么呢?请高手能解释一下,十分感谢


只看该作者    顶部
离线 battleman
一朵梨花压海棠


来自 北京
精华贴数 0
个人空间 0
技术积分 4830 (323)
社区积分 83 (4325)
注册日期 2004-4-13
论坛徽章:24
ITPUB元老     
      

发表于 2007-12-6 23:34 
是这样的:
当session 1执行lock table test.test0001 in exclusive mode;  这样对test0001加了一个TM锁,阻塞了session 2和session3对test0001的操作。同时session2和session3都会在test0001上加TM锁。
当session 1执行roll时释放TM锁时,按照先后顺序,session2便完成了insert 操作,同时在test0001上面加了TM和TX锁,这样肯定阻塞session3对test0001的操作


__________________
资本的原始积累...
msn: sleepingbag1124@hotmail.com
邮箱:sleepingbag1124@sina.comm
blog: http://battleman.itpub.net/
只看该作者    顶部
离线 dhcwenOra
中级会员



精华贴数 0
个人空间 20
技术积分 1825 (1021)
社区积分 29 (7246)
注册日期 2006-11-4
论坛徽章:2
生肖徽章2007版:鼠ITPUB新首页上线纪念徽章    
      

发表于 2007-12-6 23:52 
不对吧,session1释放了tm锁,session2和session3不就相当于两条普通insert语句了吗,为啥会session2诸塞session3?


__________________
如果浪费了半小时时间,我就觉得很惭愧。后来我看到很多人不珍惜时间的时候,我就觉得这样的人真没出息。时间是自己的,你到一个公司打工的时候,偷懒,老板没有看见,就觉得自己又蒙了一下,玩猫和老鼠的游戏,真是没有必要。公司所付的那么一点钱,就买下了你一个月的青春?学会的东西首先是自己的,其次才是公司的。没有多少人真正计算过自己一个小时值多少钱。
只看该作者    顶部
离线 stronghearted
资深会员


精华贴数 0
个人空间 0
技术积分 3109 (550)
社区积分 134 (3387)
注册日期 2007-4-19
论坛徽章:9
会员2007贡献徽章授权会员生肖徽章2007版:蛇2008北京奥运纪念徽章:现代五项生肖徽章2007版:羊2008新春纪念徽章
生肖徽章2007版:鸡生肖徽章2007版:鼠ITPUB新首页上线纪念徽章   

发表于 2007-12-7 00:58 
session1,session 2中加了tm的排他锁


__________________
我的茅庐

我的伊妹儿

佛曰:
让我们成熟的,是经历,是磨难;
让我们幸福的,是宽容,是爱;
让我们心安的,是理解,是信任。
只看该作者    顶部
离线 funnyok



精华贴数 0
个人空间 0
技术积分 3842 (427)
社区积分 16 (9433)
注册日期 2001-12-5
论坛徽章:28
ITPUB元老管理团队2006纪念徽章会员2006贡献徽章生肖徽章2007版:马生肖徽章2007版:虎生肖徽章2007版:虎
生肖徽章2007版:牛数据库板块每日发贴之星操作系统板块每日发贴之星   

发表于 2007-12-7 01:00 
give us ddl of the table including all indexes and constraints


__________________
只看该作者    顶部
离线 stronghearted
资深会员


精华贴数 0
个人空间 0
技术积分 3109 (550)
社区积分 134 (3387)
注册日期 2007-4-19
论坛徽章:9
会员2007贡献徽章授权会员生肖徽章2007版:蛇2008北京奥运纪念徽章:现代五项生肖徽章2007版:羊2008新春纪念徽章
生肖徽章2007版:鸡生肖徽章2007版:鼠ITPUB新首页上线纪念徽章   

发表于 2007-12-7 01:01 


QUOTE:
原帖由 dhcwenOra 于 2007-12-6 23:52 发表
不对吧,session1释放了tm锁,session2和session3不就相当于两条普通insert语句了吗,为啥会session2诸塞session3?

不是的。如果按你说的话,其实在session2中加的是tm的row排他锁。

[ 本帖最后由 stronghearted 于 2007-12-7 01:02 编辑 ]


__________________
我的茅庐

我的伊妹儿

佛曰:
让我们成熟的,是经历,是磨难;
让我们幸福的,是宽容,是爱;
让我们心安的,是理解,是信任。
只看该作者    顶部
在线/呼叫 ZALBB
正在看龙蛇演义


精华贴数 8
个人空间 0
技术积分 35708 (25)
社区积分 16612 (108)
注册日期 2001-10-15
论坛徽章:104
      
      

发表于 2007-12-7 08:29 


QUOTE:
原帖由 stronghearted 于 2007-12-7 00:58 发表
session1,session 2中加了tm的排他锁

SESSION2 插入纪录而已,怎么会用排他锁?

应该是该表有唯一性索引造成的。


__________________
中国就有这么一群奇怪的人, 本身是最底阶层, 利益每天都在被损害,却具有统治阶级的意识. 在动物世界里找这么弱智的东西都几乎不可能。
                                                                                                                                                            ---------林语堂
只看该作者    顶部
离线 net pinaster
游侠


精华贴数 0
个人空间 0
技术积分 256 (8366)
社区积分 1 (43170)
注册日期 2005-8-4
论坛徽章:4
生肖徽章2007版:猪生肖徽章2007版:猪生肖徽章2007版:牛ITPUB新首页上线纪念徽章  
      

发表于 2007-12-7 08:50 
表 test.test0001 没有任何索引和约束。我现在没法拿到ddl,环境在家里呢...
数据库版本是10.2。


只看该作者    顶部
在线/呼叫 ZALBB
正在看龙蛇演义


精华贴数 8
个人空间 0
技术积分 35708 (25)
社区积分 16612 (108)
注册日期 2001-10-15
论坛徽章:104
      
      

发表于 2007-12-7 10:15 
作了测试,SESSION 1 没解锁之前,2,3都申请 tm=3  的锁,1 解锁后,
2 获得 tm=3,但 3 要  tm=6, 结果被堵,奇怪,3 为什么要  tm=6 的锁?
PHP code:


SCOTT
@bi>select b.* from (select id1,id2 from v$lock where block=1av$lock b

  2  where a
.id1=b.id1 and a.id2=b.id2 order by b.id1,b.id2,b.ctime;



ADDR             KADDR              SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

---------------- ---------------- ----- -- ---------- ---------- ---------- ---------- ---------- ----------

00000000B68DAD80 00000000B68DADA8   108 TM    1232201          0          0          3         27          0

00000000B68DAC80 00000000B68DACA8   148 TM    1232201          0          0          3         30          0

00000000B68DAB80 00000000B68DABA8    20 TM    1232201          0          6          0         39          1





SCOTT
@bi>select b.* from (select id1,id2 from v$lock where block=1av$lock b

  2  where a
.id1=b.id1 and a.id2=b.id2 order by b.id1,b.id2,b.block;



ADDR             KADDR              SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

---------------- ---------------- ----- -- ---------- ---------- ---------- ---------- ---------- ----------

00000000B68DAD80 00000000B68DADA8   108 TM    1232201          0          0          6         75          0

00000000B68DAB80 00000000B68DABA8   148 TM    1232201          0          3          0         75       &nb




__________________
中国就有这么一群奇怪的人, 本身是最底阶层, 利益每天都在被损害,却具有统治阶级的意识. 在动物世界里找这么弱智的东西都几乎不可能。
                                                                                                                                                            ---------林语堂
只看该作者    顶部
离线 ora_pixies
一般会员



精华贴数 0
个人空间 0
技术积分 458 (4746)
社区积分 148 (3205)
注册日期 2006-10-10
论坛徽章:0
      
      

发表于 2007-12-7 10:23 
是挺怪的


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰网域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:060528号 联系我们 法律顾问