RAC 架构详解

这些隔离级别是根据在并发执行事务之间必须防止的现象来定义的。 可预防的现象有:
脏读
更新丢失
模糊读--不可重复读  两次读的结果不一样

幻读----两次读的结果行数不一样
oracle支持三种事务级别
read commited    ----默认模式
SErializable
read noly

set transaction isolation level serializable;
set transaction read only;
ALTER SESSION SET ISOLATION_LEVEL=SERIALIZABLE;
ALTER SESSION SET ISOLATION_LEVEL=READ COMMITTED;

不能对system 和sys 用户设置

ORA-01453: SET TRANSACTION 必须是事务处理的第一个语句

造成原因:之前的事务没有结束。

比如insert或update后,没有commit!

ORA-01453: SET TRANSACTION must be first statement of transaction


支持并发的lock 机锁
1,资源(resource structure)
     成员:owner ,waiter,converter(转换器)
2,lock structure
当一个进程访问共享内存,就申请一个lock structure 锁,每个lock structure记录锁模式,进程id等信息,如果不能获得资源,就挂在resource structure的waiter队列,如果是先获

share,再获得exclusive,就挂在converter(转换器)队列,当然立即获得的就是owner


支持并发的latch
当一个用户进程产生一条sql 语句,送到server processes ,先对查找的值进行hash 算法瞪大哦一个索引号,然后根据索引号查找hash bucket,找到hash bucket 找到所属的数据块指针,如

果数据块在内存,获取该数据快的latch cache buffer chain(hash chain) 在 cache bhffer chain 保护下找到buffer header ,然后枷锁,读书buffer 内容,读取完释放buffer 锁,未获得

锁,则buffer busy waits;(这是数据块在内存的情况下,)
当数据块不再内存,产生物理I/O,从数据文件读取数据块,在辅助LRU开始找可用的buffer,然后将数据挂在LRU的buffer(需要获取latch cache buffer chain),如果在LRU找到可用的

buffer,放到冷端的头部,如果未能找到buffer,就从冷端后面找,如果冷端的数据块TCH>=2,将该buffer移动热端头部,小于放到冷端头部,遇到脏块放置主LRUW,搜索到LRU40%仍未找到,

将通知DBWR写LRUW脏队列,(free buffer waits),smon 进程每3秒触发DBWR将主LRUW的部分块移动到辅助LRUW,写完后,重用的buffer 加载到辅助LRU


同时还要将hash值对应找到的块挂在hash chain,释放资源


一个语句,先解析,语法上的问题,语法通过后,计算这个SQL语句的hash值,然后根据hash 值在shared pool 中定位hash bucket ,然后在hash bucket中进行遍历,如果该语句被解析了,就

进行软解析。根据原有的执行计划去找数据。

否者要进行硬解析了,(要在shared pool 申请一块空间,存放执行计划等信息,同时需要在hash bucket 申请空间,然后对链表的修改,对链表进行加锁,这就是LATCH)先根据对象的统计

信息,以及当前选择的优化器,确定最佳的访问路线,产生执行计划,访问数据,返回结果


rac 要实现并发,引用了分布式锁管理器(Distribution lock management DLM)记录着那个节点正在用那种方式操作那个数据,并协调节点间的竞争

RAC 设计了cache fusion (内存融合),多个节点的内存虚拟成一个大的SGA,主要的两个进程是GCS,GES;
GCS 实现实例间数据块的复制传递,
GES负责锁管理,进程只有获得某数据的锁才能操作数据
RAC实现并发,比单实例多了两种锁,(PCM_LOCK,Non_PCM LOCK),这两种锁对应两种资源,即cachefusion和Non_cahcefuison,要通过锁管理者两种资源,在RAC还需要另一个锁管理器DML组件

,(决定是否允许节点上用户对数据的访问请求)

cachefusion 资源就是数据块资源
Non_cachefusion 资源就是数据库缓存和数据文件,参数文件等


RAC 环境特殊问题
1,并发控制,有DLM机制实现
2,健忘症,集群的配置文件不是集中存放,每个节点都有副本
3,脑裂,心跳机制,心跳停止,投票选择集群控制权子啊那个节点,其他剔除重启
4,I/O隔离,oracle RAC使用的是软件机制,直接重启,让其实现IO隔离


RAC 集群逻辑组件
存储层,通常使用的存储设备:EMC,NETAPP,IBM,HP,通过HBA卡和光仟连接存储
网络层  我们搭建集群用的IP是传输IP数据包
        光仟和HBA卡是传输SCSI数据
集群软件层(oracle安装包的第三个grid)-------对运行于其上的应用层监视,并在发生异常时进行重启,切换等干预
         单实例的oracle数据库是运行在OS Kernel上的,OS负责管理硬件,oracle不会直接访问硬件,是通过os Kernel 代替访问的,而这机制不适合集群环境,所以在这基础上,多了个

clusterware集群软件,在oracle 与内核之间,协调集群节点间访问硬件 名称为 cluster ready service CRS, 10.2开始更名为clusterware,LINUX 必须用CRS
应用层------由若干个CRS resource组成
            一个resource就是一个进程,或是一组进程组成的完成服务
            这些resource是在安装oralce RAC 的过程创建的,并注册到CRS,以元数据(metadata)形式放置OCR磁盘上,这些元数据包括(resource资源名称,如何启动,停止,检查等配置

信息)
            RAC的CRS resource 资源包括GSD,ONS,VIP 在CRS创建中创建,database,instance,listener
,service


RAC架构详解
在单实例的原有基础上,集群在每个节点上多了一些后台进程和一个GRD内存,
          GRD全局资源目录,用来存储同一个数据库在不同节点的分布,即多个实例同时并发操作一个数据库,这个数据块存在各自GRD内存
          LMONJ进程,实例间定期通讯,检查各自当前状态,对方是否异常等
          LMD进程,提供GES管理cachefusion服务
          LCK进程,负责对同一数据库数据块访问的锁管理
          LMSN进程,提供cachefusion节点数据块复制的GCS服务
          DIAG进程,是一个日志进程,记录集群的健康状态,实例错误时的诊断信息

   SOcpfj5x83gAAAAASUVORK5CYII=Kxn2P1wnQVef8dPNNN03+PyIHwjanEOX5AAAAAElFTkSuQmCC


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

转载于:http://blog.itpub.net/31401161/viewspace-2134495/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值