ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 9391|回复: 76

[体系架构] 请教一个刚遇到的关于lock的问题 [复制链接]

注册会员

游侠

精华贴数
0
技术积分
318
社区积分
1
注册时间
2005-8-4
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:牛
日期:2008-11-10 09:55:38生肖徽章2007版:猪
日期:2009-02-16 13:39:32生肖徽章2007版:猪
日期:2009-03-11 02:06:58
发表于 2007-12-6 23:19:45 |显示全部楼层
请教一个刚遇到的关于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 仍然在等待锁,为什么呢?请高手能解释一下,十分感谢

注册会员

一朵梨花压海棠

精华贴数
0
技术积分
5249
社区积分
107
注册时间
2004-4-13
论坛徽章:
30
ITPUB元老
日期:2009-03-11 15:35:03咸鸭蛋
日期:2011-11-06 22:20:25紫蛋头
日期:2011-12-27 22:15:052012新春纪念徽章
日期:2012-01-04 11:49:54
发表于 2007-12-6 23:34:50 |显示全部楼层
是这样的:
当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的操作
招聘初级数据库工程师、网络、操作系统及存储工程师--地点北京。
有意者站内短我
或者发简历到 j_real@vip.sina.com

使用道具 举报

注册会员

中级会员

精华贴数
0
技术积分
2321
社区积分
32
注册时间
2006-11-4
论坛徽章:
3
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鼠
日期:2008-01-02 17:35:532010新春纪念徽章
日期:2010-03-01 11:19:54
发表于 2007-12-6 23:52:15 |显示全部楼层
不对吧,session1释放了tm锁,session2和session3不就相当于两条普通insert语句了吗,为啥会session2诸塞session3?
如果浪费了半小时时间,我就觉得很惭愧。后来我看到很多人不珍惜时间的时候,我就觉得这样的人真没出息。时间是自己的,你到一个公司打工的时候,偷懒,老板没有看见,就觉得自己又蒙了一下,玩猫和老鼠的游戏,真是没有必要。公司所付的那么一点钱,就买下了你一个月的青春?学会的东西首先是自己的,其次才是公司的。没有多少人真正计算过自己一个小时值多少钱。

使用道具 举报

注册会员

beginner

精华贴数
0
技术积分
3159
社区积分
137
注册时间
2007-4-19
论坛徽章:
11
授权会员
日期:2007-07-08 18:54:592009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:蛇
日期:2008-10-24 16:46:512008北京奥运纪念徽章:现代五项
日期:2008-10-24 13:26:49生肖徽章2007版:羊
日期:2008-04-17 18:05:112008新春纪念徽章
日期:2008-02-13 12:43:03生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:102010广州亚运会纪念徽章:皮划艇
日期:2011-02-15 13:51:42
发表于 2007-12-7 00:58:39 |显示全部楼层
session1,session 2中加了tm的排他锁
我的茅庐

佛曰:
让我们成熟的,是经历,是磨难;
让我们幸福的,是宽容,是爱;
让我们心安的,是理解,是信任。

使用道具 举报

注册会员

老男孩

精华贴数
0
技术积分
3844
社区积分
16
注册时间
2001-12-5
论坛徽章:
28
ITPUB元老
日期:2005-06-17 10:37:44操作系统板块每日发贴之星
日期:2005-07-02 01:01:58数据库板块每日发贴之星
日期:2005-07-18 01:01:26管理团队2006纪念徽章
日期:2006-04-16 22:44:45会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2007-12-7 01:00:30 |显示全部楼层
give us ddl of the table including all indexes and constraints

使用道具 举报

注册会员

beginner

精华贴数
0
技术积分
3159
社区积分
137
注册时间
2007-4-19
论坛徽章:
11
授权会员
日期:2007-07-08 18:54:592009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:蛇
日期:2008-10-24 16:46:512008北京奥运纪念徽章:现代五项
日期:2008-10-24 13:26:49生肖徽章2007版:羊
日期:2008-04-17 18:05:112008新春纪念徽章
日期:2008-02-13 12:43:03生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:102010广州亚运会纪念徽章:皮划艇
日期:2011-02-15 13:51:42
发表于 2007-12-7 01:01:20 |显示全部楼层
原帖由 dhcwenOra 于 2007-12-6 23:52 发表
不对吧,session1释放了tm锁,session2和session3不就相当于两条普通insert语句了吗,为啥会session2诸塞session3?



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

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

佛曰:
让我们成熟的,是经历,是磨难;
让我们幸福的,是宽容,是爱;
让我们心安的,是理解,是信任。

使用道具 举报

精华贴数
8
技术积分
49197
社区积分
22305
注册时间
2001-10-15
论坛徽章:
184
蜘蛛蛋
日期:2012-02-03 17:20:24迷宫蛋
日期:2011-12-20 08:39:39茶鸡蛋
日期:2011-12-01 22:49:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41咸鸭蛋
日期:2012-01-06 16:55:17蜘蛛蛋
日期:2011-10-20 15:51:252012新春纪念徽章
日期:2012-01-04 11:49:54迷宫蛋
日期:2011-10-29 11:12:59复活蛋
日期:2011-12-14 09:37:30灰彻蛋
日期:2011-12-30 14:51:36ITPUB年度最佳版主
日期:2011-12-28 15:24:18紫蛋头
日期:2011-08-31 10:57:28
发表于 2007-12-7 08:29:31 |显示全部楼层
原帖由 stronghearted 于 2007-12-7 00:58 发表
session1,session 2中加了tm的排他锁


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

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

使用道具 举报

注册会员

游侠

精华贴数
0
技术积分
318
社区积分
1
注册时间
2005-8-4
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:牛
日期:2008-11-10 09:55:38生肖徽章2007版:猪
日期:2009-02-16 13:39:32生肖徽章2007版:猪
日期:2009-03-11 02:06:58
发表于 2007-12-7 08:50:08 |显示全部楼层
表 test.test0001 没有任何索引和约束。我现在没法拿到ddl,环境在家里呢...
数据库版本是10.2。

使用道具 举报

精华贴数
8
技术积分
49197
社区积分
22305
注册时间
2001-10-15
论坛徽章:
184
蜘蛛蛋
日期:2012-02-03 17:20:24迷宫蛋
日期:2011-12-20 08:39:39茶鸡蛋
日期:2011-12-01 22:49:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41咸鸭蛋
日期:2012-01-06 16:55:17蜘蛛蛋
日期:2011-10-20 15:51:252012新春纪念徽章
日期:2012-01-04 11:49:54迷宫蛋
日期:2011-10-29 11:12:59复活蛋
日期:2011-12-14 09:37:30灰彻蛋
日期:2011-12-30 14:51:36ITPUB年度最佳版主
日期:2011-12-28 15:24:18紫蛋头
日期:2011-08-31 10:57:28
发表于 2007-12-7 10:15:27 |显示全部楼层
作了测试,SESSION 1 没解锁之前,2,3都申请 tm=3  的锁,1 解锁后,
2 获得 tm=3,但 3 要  tm=6, 结果被堵,奇怪,3 为什么要  tm=6 的锁?

[php]
SCOTT@bi>select b.* from (select id1,id2 from v$lock where block=1) a, v$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=1) a, v$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          1

[/php]

使用道具 举报

注册会员

一般会员

精华贴数
0
技术积分
501
社区积分
164
注册时间
2006-10-10
论坛徽章:
0
发表于 2007-12-7 10:23:30 |显示全部楼层
是挺怪的

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部