个实例也请求该块,那么GCS要负责跟踪拥有该块的实例、拥有块的版本是什么,以及块处于何
种模式。LMS进程是GCS的实现。
全局队列服务(GES):
全局排队服务(GES)跟踪所有Oracle队列机制的状态(No-PCM资源),它主要负责维护数
据字典缓存(dictionary cache)和库缓存(library cache )的一致性和事务并发执行的一致
性控制。dictionary cache是实例的SGA内所存储的对数据字典信息的缓存。由于数据字典信息
存储在内存中,因而在某个节点上对数据字典进行的修改(如DDL)必须立即被传播至所有节点
上的dictionary cache。GES负责处理上述情况,并消除实例间出现的差异。同时,为了不影响
依赖这些对象的SQL语句的解析,数据库内对象上的库缓存锁会被去掉。这些锁必须在实例间进
行维护,而全局队列服务必须确保请求访问相同对象的多个实例间不会出现死锁。LMON、LCK
和LMD进程联合工作来实现全局队列服务的功能。GES是除了数据块本身的维护和管理(由
GCS完成)之外,在RAC环境中协调节点间其他资源的重要服务。
全局资源目录(GRD):
GES和GCS共同维护全局资源目录(GRD)。GRD类似于内存中的数据库,其中包含有关缓存
中存在的所有块的详细信息。GRD知道块的最新版本的位置、块的模式、块的角色等。当用户
请求任何数据块时,GCS从GRD获取所有信息。RAC会给每一个资源(数据块)选择一个节点
作为它的Master Node,而其他节点作为Shadow Node。Master Node的GRD中记录了该资
源在所有节点上的使用信息,而shadow node的GRD只需要记录资源在该节点上的使用信息。
GRD存储在SGA中,GRD是一个分布式资源,这意味着每个实例维护GRD的某些部分。GRD的
这种分布特性是RAC容错的关键。
块过去镜像(Past Image):
为了保持数据完整性,Oracle引入了Past Image概念。在Oracle数据库中,块被弄脏后不会立
即写入磁盘。这是为了减少过多的IO操作。在RAC环境中,当其他实例以读写目的请求同一个
脏块时,拥有该块的实例会创建该块的镜像(PastImage),然后将该块发送给请求实例。此块
的镜像副本称为过去镜像(PI)。如果出现故障,Oracle可以通过读取PI来重建块。根据块在脏
阶段被弄脏的次数,可以有超过1个PI块。块的Past Image与CR(一致读)镜像不同。Past
Image是通过应用undo来创建,然后将其转换为CR镜像。
后台进程(Background Process):
评论