日期:2014-05-16  浏览次数:20692 次

深究Oracle中的锁之锁的基础架构(原创)

Lock概述
Lock,首先代表一种控制机制,其次在这个机制中有一个成员也叫LOCK
LOCK框架包含三个组件:Resource Structure(资源)、Lock Structure(锁)和Enqueue(排队机制)。Resource和Lock是数据结构,Enqueue是算法。
Resource Structure
Oracle对于每个需要进行“并发控制”的资源,都在SGA中用一个数据结构来描述它,这个数据结构叫做Resource Structure。这个数据结构中的有3个与“并发控制”相关的成员:Onwer,Waiter,Converter。这是3个指针,分别指向3个有 Lock Structure组成的链表。
Lock Structure
每个进程要访问共享资源时,必须要先“锁定”该资源。这个动作实际就是从内存中申请一个Lock Structure,在其中记录”锁模式,进程ID“等重要信息。然后看是否能立即获得访问权,如果不能,则把Lock Structure挂到Resource Structure的Waiter链表中。如果能获得访问权,则把
Lock Structure挂到Resource Structure的 Onwer 链表中。上面说到的 Resource Structure中的 Onwer,Waiter,Converter三个成员就是指向由Lock Structure组成的链表的指针。Lock的组成示意图如下
?????????
锁模式
Oracle中的对象可以分为两类,简单对象(Simple Objects)和复合对象(Compound Objects)。数据表是典型的复合对象,表中的每条记录是典型的简单对象。对于简单对象只有3中模式:Null、Share、Exclusive。而 对于复合对象,除了
Null、Share、Exclusive这3中模式外,还有 Sub-Shared、Sub-Exclusive、Shared-sub-exclusive

Null:模式值为1。不妨碍任何访问,这种模式主要用于数据字典。

Share: 模式值为4。 拥有者本身对资源进行只读访问,允许其他用户并发只读访问。
Exclusive:
模式值为6。 拥有者本身对资源进行修改访问,不允许其他用户任何并发访问
Sub-Shared:
模式值为2。 当需要以Share模式访问复合对象中的成员时,需要对复合对象加这种模式的锁,而对成员加Shared模式的锁;这种模式有不同的缩写(SS,RS,CR)。
Sub-Exclusive:
模式值为3。 当要以Exclusive模式访问复合对象中的成员时,需要对复合模式对