楼主: ZALBB

[精华] 我对ORACLE数据锁的一点体会

[复制链接]
论坛徽章:
2
2011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:49:54
31#
发表于 2004-10-18 13:49 | 只看该作者
最初由 jacky_liu_cn 发布
[B]我还是认为我们前面讨论的与oracle的定义没有冲突,可能是我所说的表和元组与oracle定义的compound object和simple object相比太片面了,或者说前者是后者的一个例子。
  另外oracle修改行时在表级加锁不是为了防止对表进行DDL操作时冲突,而是为了提高任何其他事务在加锁时的锁冲突检查的效率,如果其他事务要执行DDL操作,要申请的是字典锁,字典锁当然也要进行锁冲突检查。如果其他事务只执行DDL操作,也是要进行锁冲突检查的。在表级加锁就是为了提高锁冲突检查的效率。jeffi73在这个问题上做了详细的解释。 [/B]


在表级加锁就是为了提高锁冲突检查的效率这句话有失偏颇,提高锁冲突检查效率只是在表级加锁带来的一个好处,如果只为了使用和给自己一个已经理解了的理由的话,我想jeffi73等大侠的论述足够了,但如果要变成纸上文字的话,从负责的角度出发,应该更准确一点,我觉得jeffi73如果能够再加上从整体与部分、必要条件与充分条件等方面的论述,可以更好的说明锁的模式与种类之间的关系。

使用道具 举报

回复
论坛徽章:
0
32#
发表于 2004-10-18 14:05 | 只看该作者
我也是最近遇到了这方面的问题才开始关注锁的问题,所以我所发表的观点只代表了我个人的理解水平。耕耘者为什么不发表一下自己对锁的见解啊,很想向你学习。

使用道具 举报

回复
论坛徽章:
2
2011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:49:54
33#
发表于 2004-10-18 14:23 | 只看该作者
最初由 jacky_liu_cn 发布
[B]我也是最近遇到了这方面的问题才开始关注锁的问题,所以我所发表的观点只代表了我个人的理解水平。耕耘者为什么不发表一下自己对锁的见解啊,很想向你学习。 [/B]


我也是在itpub上看了有关所锁的讨论后,才进一步深入思考的,转贴了官方的定义,只是为了大家更好的理解,深入的理解我也谈不上,希望与大家共勉。

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB技术丛书作者
日期:2010-09-26 15:24:56优秀写手
日期:2014-02-13 06:00:15
34#
发表于 2004-10-22 01:01 | 只看该作者

关于最近几位朋友留言的几点说明

首先感谢“耕耘者”朋友对此贴的鼓励与意见
但是,你所贴的内容很可能并不是Oracle的官方文档,该文我首先是在Steve Adams的《Oracle8i Internal Services for Waits, Latches, Locks,and Memory》所见(当然也有可能是因为我见识有限,该内容最原始出处也许就是Oracle或还有其它什么地方),在我写《Oracle多粒度封锁机制研究》之前,我参考了该书的相关内容(顺便说一下,该书我当初是花美圆从amazon买的,可刚拿到书就在网上看到了PDF版本 )。

应该说明的是,不管该文的原始出处何在,我都认为它本身并不是一个很严格的定义性的文档,而是在一个比较高的层次对Oracle锁机制的概括,我想我的文章应该没有与该文矛盾的地方。要想理解其文章的真正内涵,我建议大家仔细阅读一下《A96524-Oracle9i Database
Concepts》中的第20章中的“How Oracle Locks Data”的内容,我想这才是Oracle的官方文档。

很同意“耕耘者”朋友所说“要变成纸上文字的话,从负责的角度出发,应该更准确一点”,这也是我努力去做的,因为经常会看到网上甚至书上一些技术文章存在明显的问题,我想这些问题可能会悟导很多朋友。所以我在写技术文章时是非常慎重的(这也是我所写技术文章并
不多的原因之一,当然最主要的原因是我个人比较懒散),既有自己的实际经验,但也要找到理论根据(比如在写此文时,就参考了多本中、外经典的数据库教材中的相关内容),如果觉得自己还没有完全理解问题的实质我是不会轻易发表技术文章的,不敢说使自己的文章都成为“精华”,但也尽量不要悟导其他朋友,当然限于自己的水平有限也不能完全避免文章中的问题,所以希望大家发表更多的意见与建议。

对于jacky_liu_cn朋友,向你的jacky_liu_cn@hotmail.com发了一封邮件,希望对你能有帮助。

使用道具 举报

回复
论坛徽章:
2
2011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:49:54
35#
发表于 2004-10-22 12:22 | 只看该作者

Re: 关于最近几位朋友留言的几点说明

最初由 jeffli73 发布
[B]首先感谢“耕耘者”朋友对此贴的鼓励与意见
但是,你所贴的内容很可能并不是Oracle的官方文档,该文我首先是在Steve Adams的《Oracle8i Internal Services for Waits, Latches, Locks,and Memory》所见(当然也有可能是因为我见识有限,该内容最原始出处也许就是Oracle或还有其它什么地方),在我写《Oracle多粒度封锁机制研究》之前,我参考了该书的相关内容(顺便说一下,该书我当初是花美圆从amazon买的,可刚拿到书就在网上看到了PDF版本 )。

应该说明的是,不管该文的原始出处何在,我都认为它本身并不是一个很严格的定义性的文档,而是在一个比较高的层次对Oracle锁机制的概括,我想我的文章应该没有与该文矛盾的地方。要想理解其文章的真正内涵,我建议大家仔细阅读一下《A96524-Oracle9i Database
Concepts》中的第20章中的“How Oracle Locks Data”的内容,我想这才是Oracle的官方文档。

很同意“耕耘者”朋友所说“要变成纸上文字的话,从负责的角度出发,应该更准确一点”,这也是我努力去做的,因为经常会看到网上甚至书上一些技术文章存在明显的问题,我想这些问题可能会悟导很多朋友。所以我在写技术文章时是非常慎重的(这也是我所写技术文章并
不多的原因之一,当然最主要的原因是我个人比较懒散),既有自己的实际经验,但也要找到理论根据(比如在写此文时,就参考了多本中、外经典的数据库教材中的相关内容),如果觉得自己还没有完全理解问题的实质我是不会轻易发表技术文章的,不敢说使自己的文章都成为“精华”,但也尽量不要悟导其他朋友,当然限于自己的水平有限也不能完全避免文章中的问题,所以希望大家发表更多的意见与建议。

对于jacky_liu_cn朋友,向你的jacky_liu_cn@hotmail.com发了一封邮件,希望对你能有帮助。 [/B]


我引用的确是《Oracle8i Internal Services for Waits, Latches, Locks,and Memory》,用‘官方文章’可能有压人之嫌,深表歉意,更开始看了jeffli73 的论述,就觉得很不错,只是觉得《Oracle8i Internal Services for Waits, Latches, Locks,and Memory》描述的角度不同,转贴与此,供大家参考。希望jeffli73写更多的好文。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2009-03-23 21:53:59
36#
发表于 2004-10-23 12:44 | 只看该作者
我谈一下对意向锁的理解:
意向锁的引入主要是为了解决数据库中查询时所出现的“幻象”问题,及若事务T1进行一个很大的查询,而事务T2同时对数据进行更新,更新的数据刚好满足T1的查询条件,事务T2在T1前提交,那么那么事务T1所查询到的结果显然不满足一致性,即所谓的“幻象”,为了解决这个问题,我们利用意向锁,即在查询时,对满足条件的所有数据页面加锁,使得其它事务对同一范围的更新操作等待,从而可以保证查询的正确性。
我说讲的只是其中的一点点,具体可以参考《数据库系统实现》关于并发控制的内容

使用道具 举报

回复
论坛徽章:
2
2011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:49:54
37#
发表于 2004-10-23 12:57 | 只看该作者
最初由 hilbert_2003 发布
[B]我谈一下对意向锁的理解:
意向锁的引入主要是为了解决数据库中查询时所出现的“幻象”问题,及若事务T1进行一个很大的查询,而事务T2同时对数据进行更新,更新的数据刚好满足T1的查询条件,事务T2在T1前提交,那么那么事务T1所查询到的结果显然不满足一致性,即所谓的“幻象”,为了解决这个问题,我们利用意向锁,即在查询时,对满足条件的所有数据页面加锁,使得其它事务对同一范围的更新操作等待,从而可以保证查询的正确性。
我说讲的只是其中的一点点,具体可以参考《数据库系统实现》关于并发控制的内容 [/B]


oracle通过回滚段来保证数据读一致性的,select 查询对数据不加任何锁,如果是select ...for update 则加锁,这时T2应该等待T1的完成。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2009-03-23 21:53:59
38#
发表于 2004-10-23 13:20 | 只看该作者
最初由 耕耘者 发布
[B]

oracle通过回滚段来保证数据读一致性的,select 查询对数据不加任何锁,如果是select ...for update 则加锁,这时T2应该等待T1的完成。 [/B]


不知道我对oracle回滚段的概念理解是否正确,我再谈谈自己的疑问:
正如我上面所说,事务T2完成后会写入磁盘页面(总有这种情况发生),那么此时的回滚段内容是否和磁盘的页面内容一致呢,假如T1访问的回滚段中内容还是以前的,如果一致,那么就出现我们所说的“幻象”,否则,那么就存在这样的问题,回滚段怎么能与磁盘数据内容不一致呢?注意,T2此时已提交

使用道具 举报

回复
论坛徽章:
27
授权会员
日期:2005-10-30 17:05:33管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36优秀写手
日期:2013-12-18 09:29:13马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
39#
发表于 2004-10-25 11:36 | 只看该作者

Re: 我感到非常遗憾

最初由 jeffli73 发布
[B]我感到非常遗憾,楼主没有完全看懂我写的那篇《Oracle多粒度封锁机制研究》,这可能主要是本人水平有限、表达不清所致。

要理解Oracle的封锁机制,关键要搞清为什么要“多粒度”及为什么要引入“意向锁”。

其实生活中有很多类似的问题,我先描述一个,我把它命名为“艺术中心问题”,如果此问题与哪位计算机界前辈已描述的问题有类似之处,纯属本人孤陋寡闻,而绝非有意抄袭。


一个艺术中心占地很广(我们把它类比做数据库),有许多独立的建筑-艺术馆(艺术馆相当于数据库中的“表”),各个艺术馆中又有许多展室(相当于表中的记录),为了使各个艺术馆得到有效的管理,对进出艺术馆的人员进行了分类并对他们各自的行为做了如下限制:
A:一般观众:,在任何情况下,他们可以自由进出艺术馆的各个展室,没有限制,但他们只能观看;
B:不同工种的维修工人:他们可以进入展室进行检查或维修,但是在某一时刻,只能有一个工种的工人在某个展室进行维修(这主要是为了安全,比如油漆工与电焊工如果同时作业,可能会引起火灾);
C:重要来宾(比如联合国世界文化遗产的评审官员):为了保证这些重要来宾的参观效果,在他们参观期间,不允许任何的维修、展室调整(下面介绍)等工作,但仍然可以接待一般观众;
D:展室调整人员:由于展室调整会涉及多个展室,所以在调整期间,不允许对任何展室进行维修,也不接待任何重要来宾;

基本情况就是这样,现在一位名叫Oracle的老师问他班上的小学生,如果你是各个艺术馆的管理人员,你将采取何种措施来保证这些规定的执行。

一名叫TOM的小学生非常聪明,考试总考第一,平时也爱出个风头,他第一个举手回答问题,说:这个容易,
1)对于一般观众,他们手持通票;
2)对于重要来宾,我先发给他们印有‘S’的胸卡;
3)对于维修工与展室调整人员,我先发给他们印有‘X’的胸卡;

到时我会守在艺术馆的门口,对于:
手持通票的人,我将一律放行;
对于佩带‘S’胸卡的人,我要检查一下我手里是否有‘X’的胸卡,如果有,对不起,他们只能等待,如果没有,他们可以进入,并将其胸卡留在我这里;他们出去时,我将胸卡还给他们;
对于佩带‘X’胸卡的人,我要检查一下我手里是否有‘S’或‘X’的胸卡,如果有,对不起,他们只能等待,如果没有,他们可以进入,并将其胸卡留在我这里;他们出去时,我将胸卡还给他们。

老师赞许地点了点头,说很好,TOM明天你就去实践一下吧。

第二天,TOM早早来到某个艺术馆的门口等候人们的到来,一般观众很多,TOM没有对他们进行任何限制,秩序很好,TOM非常高兴。
这时候,一个佩带‘X’胸卡的油漆工A走了过来,TOM检查了一下,发现还没有留下任何胸卡,就让油漆工进去了,并留下了他的胸卡。
又过了一阵子,另一个佩带‘X’胸卡的电焊工B过来了,TOM检查发现自己这里已经有一个‘X’胸卡了,他便非常有礼貌的拦住了这名工人,告诉他只有等到已经进去的工人出来领走自己的胸卡后他才能进入,B无奈只好等待。等了大约1个小时,A终于出来了,B问A刚才在哪个展室施工,A说在101,B一听气就不打一处来,他质问TOM,我要去102,艺术馆只是规定我们不能同时在一个展室工作,而我们要去不同的展室,你为什么不让我进去。
TOM听了,很委屈,说我只记录你们进出艺术馆的情况,又不记录你们进出展室的情况,谁知道你们会不会冲突,保险起见,你来晚了只能等着。


今天已经很晚了,这个小故事先写到这里,我想很多朋友已明白我的用意,TOM实际上采用的是单粒度的封锁方法,而且封锁的粒度比较大,以后我再续写另一种单粒度的方法,及Oracle老师的做法,不过到时也可能有的朋友已经帮我写好了。 [/B]



等待下文啊,能否讲完故事啊,呵呵

精彩的描述啊

使用道具 举报

回复
论坛徽章:
0
40#
发表于 2004-10-26 12:02 | 只看该作者
Good...

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表