- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle_锁机制
Oracle锁机制
表1 Oracle的TM锁类型
锁模式
锁描述
解释
SQL操作
0
none
1
NULL
空
Select
2
SS Row-S
行级共享锁,其他对象只能查询这些数据行
Select for update、Lock for update、Lock row share
3
SX Row-X
行级排它锁,在提交前不允许做DML操作
Insert、Update、Delete、Lock row share
4
S Share
共享锁
Create index、Lock share
5
SSX S/Row-X
共享行级排它锁
Lock share row exclusive
6
X Exclusive
排它锁
Alter table、Drop able、Drop index、Truncate table 、Lock exclusive
1、共享方式的表封锁 共享方式的表封锁是对表中的所有数据进行封锁,该锁用于保护查询数据的一致性,防止其它用户对已封锁的表进行更更新。其它用户只能对该表再施加共享方式的锁,而不能再对该表施加独占方式的封锁,共享更新锁可以再施加,但不允许持有共享更新封锁的进程做更新。共享该表的所有用户只能查询表中的数据,但不能更新。共享方式的表封锁只能由用户用SQL语句来设置,基语句格式如下: [quote:04b72348bd]LOCK TABLE [, ]... IN SHARE MODE [NOWAIT] [/quote:04b72348bd] 执行该语句,对一个或多个表施加共享方式的表封锁。当指定了选择项NOWAIT,若该封锁暂时不能施加成功,则返回并由用户决定是进行等待,还是先去执行别的语句。 持有共享锁的事务,在出现如下之一的条件时,便释放其共享锁: A、执行COMMIT或ROLLBACK语句。 B、退出数据库(LOG OFF)。 C、程序停止运行。 共享方式表封锁常用于一致性查询过程,即在查询数据期间表中的数据不发生改变。 2、独占方式表封锁 独占方式表封锁是用于封锁表中的所有数据,拥有该独占方式表封锁的用户,即可以查询该表,又可以更新该表,其它的用户不能再对该表施加任何封锁(包括共享、独占或共享更新封锁)。其它用户虽然不能更新该表,但可以查询该表。 独占方式的表封锁可通过如下的SQL语句来显示地获得: LOCK TABLE [, ].... IN EXCLUSIVE MODE [NOWAIT] 独占方式的表封锁也可以在用户执行DML语句INSERT、UPDATE、DELETE时隐含获得。 拥有独占方式表封锁的事务,在出现如下条件之一时,便释放该封锁: (1)、执行 COMMIT或ROLLBACK语句。 (2)、退出数据库(LOG OFF) (3)、程序停止运行。 独占方式封锁通常用于更新数据,当某个更新事务涉及多个表时,可减少发生死锁。 3、共享更新封锁方式 共享更新封锁是对一个表的一行或多行进行封锁,因而也称作行级封锁。表级封锁虽然保证了数据的一致性,但却减弱了操作数据的并行性。行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。 可通过如下的两种方式来获得行级封锁: (1)、执行如下的SQL封锁语句,以显示的方式获得: LOCK TABLE [, ].... IN SHARE UPDATE MODE [NOWAIT] (2)、用如下的SELECT ...FOR UPDATE语句获得: SELECT [, ]... FROM WHERE FOR UPDATE OF [, ].....[NOWAIT] 一旦用户对某个行施加了行级封锁,则该用户可以查询也可以更新被封锁的数据行,其它用户只能查询但不能更新被封锁的数据行.如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式封锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。 当出现如下之一的条件,便释放共享更新锁: (1)、执行提交(COMMIT)语句; (2)、退出数据库(LOG OFF) (3)、程序停止运行。 执行ROLLBACK操作不能释放行锁。 从上面讲述可见,ORACLE RDBMS的加锁机制,解决了并发事务的相容与互斥问题。相容保证事务的并发性,互斥确保数据的一致性。不同用户锁的相容与互斥关系由下图给出。 其中最后一行最后一列为其它用户提供在不同行上设置SHARE UPDATE锁。但当用户1在某行上进行更新操作时,用户2只有等待用户1提交事务后,才能更新自己所封锁的行。 中最后一行最后一列为其它用
文档评论(0)