oracle的单实例并发控制:Lock(一)

         在oracle的单实例中,有两种并发控制机制:Lock和Latch。
       
         Lock从两方面理解,首先它代表的是一种控制机制;其次,在这个机制中有一个成员也叫做Lock。
         从机制角度看,Lock框架包括3个组件:Resource Strunture(资源)、Lock Structure(锁)和Enqueue(排队机制)。Resource和Lock是数据结构,Enqueue是使用的算法。
         Converter和Waiter两个都是等待队列,二者的用法有细微区别。
         这种控制机制需要Resource、Lock两种数据结构,但会消耗内存空间。对应粗粒度或者数量有限的资源,使用这种机制还可以,但是对应数据记录这种机制就不适用了,oracle使用的是行级锁(Row-Level Lock).

会话一:
SQL> select *from a;
        ID NAM
---------- ---
         1 shi
         2 x
SQL> savepoint a;
保存点已创建。
SQL> update a set name='d' where id=2;
已更新 1 行。
会话二:
SQL> update a set name='d' where id=2;
处于等待中。。。。。。。。
会话一:
SQL> rollback to a;
回退已完成。

会话二依然处于等待中。。。。。。。。。。
 
查看系统,可以看到会话二在等待会话一的TX锁:
USERNAME EVENT SID BLOCKING_SESSION
EDU enq: TX - row lock contention 244 263
EDU SQL*Net message from client 257 [NULL]

oracle内的锁共有6中模式:
         Null、Share、Exclusive、Sub-Shared、Sub-Exclusive、Shared-sub-exclusive
           通过把对象按简单对象、符合对象分类,并使用不同锁,对性能有很大提升。
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25323853/viewspace-694372/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25323853/viewspace-694372/

你可能感兴趣的:(oracle的单实例并发控制:Lock(一))