Groups
Groups
Sign in
Groups
Groups
Liant's Oracle Note
Conversations
About
Send feedback
Help
ORACLE锁机制初步研究
8 views
Skip to first unread message
Lian...@gmail.com
unread,
May 11, 2008, 1:44:39 PM
5/11/08
Reply to author
Sign in to reply to author
Forward
Sign in to forward
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Liant's Oracle Note
经过两天的试验,对ORACLE的锁机制有了一定了解。
ORACLE的Lock按锁定的对象分为Table Lock(TM)和Row Lock(TX),按锁的等级则分为ROW SHARE
MODE(RS)、ROW EXCLUSIVE MODE(RX)、SHARE MODE(S)、SHARE ROW EXCLUSIVE
MODE(SRX)、EXCLUSIVE MODE(X)。
经过试验,发觉在10g上,所有的DML语句以及SELECT .. FOR UPDATE都会先加一个RX的TM,然后再对需要锁定的行加上X的
TX,而并不是像官方文档所说的,SELECT .. FOR UPDATE会加一个RS的TM。由于RX锁互不排斥,所以INSERT语句通常不会产
生死锁,但是有两种情况例外,一种是itl deadlock,这个情况比较复杂,另一个是主键冲突导致(当两个SESSION插入相同键值,其中一个
会出现enq: TX - row lock contention等待事件,且通过V$LOCK视图可以查看到被BLOCK的INSERT语句已经申
请到了RX的TM和X的TX,但是额外还申请了一个在另一个会话插入的记录上的S的TX,正是由于S和X互斥,所以出现等待,有等待就有了死锁的可能
性)。
关于锁转换(ORALCE无类似DB2的锁升级),我总结出来的基本的法则是:比较拥有的锁与申请的锁的并发性,拥有的锁转换为并发性高的锁,但是
有个例外情况,当拥有S锁时,如果申请RX锁,则将转换为SRX锁,其实这也很容易理解,SRX锁就是既有S锁的功能又有RX锁的功能。
Reply all
Reply to author
Forward
0 new messages