楼主: jeffli73

[精华] Oracle多粒度封锁机制研究

[复制链接]
论坛徽章:
0
21#
发表于 2004-6-17 09:29 | 只看该作者

好啊

谢谢,非常感谢

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
22#
发表于 2004-6-17 09:40 | 只看该作者
3ks楼主
学习中.....................................................

使用道具 举报

回复
论坛徽章:
65
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:52
23#
发表于 2004-6-17 10:05 | 只看该作者
下了再說!

使用道具 举报

回复
论坛徽章:
23
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期: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马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
24#
发表于 2004-6-17 10:36 | 只看该作者
非常精彩!!

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2004-8-21 10:12 | 只看该作者
太棒了,jeffli73,你是的偶像,顶顶顶!

使用道具 举报

回复
论坛徽章:
0
26#
发表于 2004-8-21 11:38 | 只看该作者

very good

thanks

使用道具 举报

回复
论坛徽章:
7
2010新春纪念徽章
日期:2010-03-01 11:07:272011新春纪念徽章
日期:2011-02-18 11:42:50ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
27#
发表于 2004-8-21 22:25 | 只看该作者

good

hao  hao  TX  DX RX

使用道具 举报

回复
论坛徽章:
0
28#
发表于 2004-9-9 20:05 | 只看该作者
好东西,谢拉!
马上好好研究研究

使用道具 举报

回复
论坛徽章:
0
29#
发表于 2004-9-10 09:03 | 只看该作者

使用道具 举报

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

对相关讨论的总结

最近,在Oracle专题深入讨论区,对我这篇文章进行了讨论,见http://www.itpub.net/270059.html
现在我想概括总结一下:
在Oracle数据库并发环境下,对于表,既要保护其数据,又要保护其结构(结构信息存储在数据字典中),很自然,针对这两种保护要求,就有了两种类型(Type)的锁:保护数据的锁我们叫数据锁(DML locks或data locks),保护结构的我们叫字典锁(DDL locks或dictionary locks)。

对于数据锁,为了适应不同事务的不同要求,提供两个层次(粒度)的锁,即表级锁(Table Locks ,TM)与行级锁(Row Locks ,TX)。
在这两个层次上,经典的上锁的方式(Mode)有两种,即共享锁(S锁)与排它锁(X锁)。

为了方便地进行锁冲突的检测,希望在表(上)级能够标识行(下)级加锁的情况,这就引入了“意向锁”(intention lock mode)的概念。根据在行级要加S锁或X锁的不同,在表级相应的就有两种意向锁,即:如果事务要在行级获得S锁,它需要首先在表级获得意向共享锁(Intent Share Lock,IS锁);如果事务要在行级获得X锁,它需要首先在表级获得意向排它锁(Intent Exclusive Lock,IX锁)。这两种意向锁与经典的S锁、X锁组合,还会产生一种新的锁:共享意向排它锁(Share Intent Exclusive Lock,SIX锁),它表示持有该锁的事务在表级加了传统的共享锁(S锁),同时该事务还将对表中的某些行加排它锁(X锁)。

这样,在表级数据锁的加锁方式就有了5种:即S、X、IS、IX、SIX。
在Oracle中,与IS对应的锁叫做Row Share Table Locks (RS)或subshare table lock, SS,它可以通过SELECT ... FOR UPDATE语句获得,但需要注意的是,这个语句在行级获得的也是排它锁,即如果两个SELECT ... FOR UPDATE语句要选定同一行,则后面的事务将被阻塞,这是与上面一般意义的定义有所不同,这时RS锁可以理解为持有该锁的事务将要修改选定的某些行。

在Oracle中,与IX对应的锁叫做Row Exclusive Table Locks (RX)或subexclusive table lock, SX,它可以通过INSERT/UPDATE/DELETE语句获得,它表征持有该锁的事务已经修改了表中的某些行。

在Oracle中,与SIX对应的锁叫做Share Row Exclusive Table Locks (SRX)或sshare-subexclusive table lock, SSX。

这样,Oracle对表级数据锁的加锁方式就有:即S、X、RS、RX、SRX等5种;而在行级只有X锁。

在Oracle中,对于字典锁,也有共享与排它之分:Share DDL Locks与Exclusive DDL Locks。对于要获得Exclusive DDL Locks的DDL操作(如ALTER、DROP等),它还必须要获得该表排它的数据锁,这样如果在某个表上有未提交的事务(即该表有某种类型的表级锁),其它SESSION提出的DROP表的操作就不会成功,因为它要向表施加X锁,与表上已有的锁不相容。
所以说,表级的数据锁既能防止与之冲突的DML操作,也能防止与之冲突的DDL操作,但不能因此就把表级的数据锁与字典锁混为一谈。

使用道具 举报

回复

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

本版积分规则 发表回复

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