[转帖]对ORACLE数据锁的一点体会_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3411 | 回复: 0   主题: [转帖]对ORACLE数据锁的一点体会        下一篇 
kim
注册用户
等级:中校
经验:1729
发帖:222
精华:0
注册:2011-7-21
状态:离线
发送短消息息给kim 加好友    发送短消息息给kim 发消息
发表于: IP:您无权察看 2011-9-21 7:44:04 | [全部帖] [楼主帖] 楼主

我对ORACLE数据锁的一点体会

该贴的部分内容是针对帖中带的附件(一位大侠关于锁的理解),提的理解/疑问,

大家在读此贴前,请先阅读该文。

先说说各类型的锁:共享锁,排它说,共享排它锁(对表定义共享,对表操作的记录排它)。

1、我对文章中意向锁的理解,就是:对表的记录进行操作之前,先对表定义(包括表结构、约束等)

   加了共享锁,这是为了避免对表的DDL操作。

   比如:当你往TAB1插入一条记录时,该表的一个字段COL8是允许为空的,插入这条记录的该字段

   的值是空的,此时,若不对该表定义加共享锁,则另外一SESSION对TAB1.COL8加非空约束,

   那该表结构修改就与插入的记录发生冲突了。所以,当执行DML操作是,必定对操作的表加DDL

   共享锁。

   这是我理解的意向锁。

   

2、文章中提及,记录行是无共享锁。我对此观点表示不同:当插入/修改子表时,对应的父表的主键

   记录应该被加共享锁,因为此时要保证父键的存在。经
测试,当插入/修改/删除子表时,父表

   确实被加了SS锁,此时可以对父表的主键做插入动作,但不允许做修改/删除。这符合逻辑。因为

   插入操作并不影响主外键的关系。但删除/修改则可能。

   

3、SHARE VS ROW SHARE有什么区别?

   我猜想:ROW SHARE是(级别=2)对表加表定义共享锁,SHARE(级别=4)是对表定义及表“所有”的

   记录加共享锁。但这样就有问题:1、SELECT FOR UPDATE产生TM=2、对查询出来的记录产生TX=6的

   锁,那这样应该与:表“所有”的记录加共享锁 相冲突了?但实际并不是,实际上,当对表加SHARE

   锁时,还是可以对该表执行 SELECT FOR UPDATE,但却不可以执行DML操作!

   

   现我只能这样理解,虽然产生了TX=6 的事务锁,但实际上,还并没有真正修改记录。和真正的

   INSERT ,UPDATE, DELETE 操作还是有区别的。也就是:SELECT FOR UPDATE这个锁有点特别:

   对加了共享锁的记录,还可以SELECT FOR UPDATE,但若想执行DML语句,则不可以,因为该表的

   “所有” 记录都加了共享锁。

   

4、若照第3点的理解,那SRX就是对表加共享锁,对表的所有记录加排它锁。这是我的猜测,不知道

   在什么地方会使用上这种锁。

总结:查看了ORACLE的文档,其并不解释如何定义的各级别的锁,为什么会这样定义,理由、用途何

在?现在我想使用各类型锁,来对ORACLE锁的各级别定义说明:

0、无

1、NULL,可以某些情况下,如分布式
数据库的查询会产生此锁。

2、SS,表结构共享锁

3、SX,表结构共享锁+被操作的记录的排它锁

4、S, 表结构共享锁+所有记录共享锁

5、SRX 表结构共享锁+所有记录排它锁

6、X   表结构排它锁+所有记录排它锁

其中 SELECT FOR UPDATE是比较特殊的一种情况:由于其不修改记录,所以对这些记录而言,

并未产生真正的排它锁,这与DML操作产生的排它锁相比,是有差别的,但由于不允许在这些记录“再”

加SELECT FOR UPDATE,所以,也不是纯粹的共享锁,我认为其是介于共享锁和排它锁之间的一种特殊

的情况,因此,ORACLE在对表加了S锁后,还允许对该表执行SELCT FOR UPDATE,但实际上,此时此语句

已经无意义了,因为加了S锁的表不允许DML操作,故,此语句于普通的SELECT 语句无差别。

请拍砖。



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论