学习是一种信仰。
分类: Oracle
2013-07-31 22:07:28
1.说一下RAC和单节点数据库的区别有哪些?你认为RAC最有用的功能是说什么?
(1)区别
1)RAC有2个以上的实例,单节点只有1个实例
2)RAC具有实例级别的高可用
3)实例与实例之间通过内联网络交换数据,单节点不可
4)RAC每个节点都有自己套SGA、后台进程、redo log、undo file
5)RAC可以增减节点
(2)RAC最有用的功能
我认为RAC最有用的功能就是实例级的failover,它可以保证在其中有节点crash的时候,其他节点可以迅速接管。保证系统持续可用。往往人们会认为RAC有2个节点性能就会提升2倍,这是一个误区,由于要保证数据的一致性往往性能会消耗在内存间的数据块相互拷贝和交叉上,因此不一定性能会好于单节点,而且节点越多性能曲线就会下降越快。
2.用ps命令查到属于crs集群软件的进程名称,贴出输出结果。
CRS集群进程是属于Clusterware集群软件自己的进程,不同于RAC实例后台进程
下面分别说明一下Clusterware集群软件自己的进程功能
(1)crs集群资源进程:全称cluster ready services,作用为管理集群中所有资源的进程,资源例如数据库监听实例内存进程
VIP 应用程序集群 ASM
crs进程是根据存储于OCR中的资源配置信息来管理这些资源的。
(2)css 集群同步进程:全称 cluster synchronization service,作用为管理集群节点成员的进程,在增减集群节点时收集节点最新状态并同步到所有节点上。这个进程发生故障会导致集群重启
(3)EVM 事件管理进程:全称 Event Management,作用为发布和记录事件的进程,发布CRS创建事件的后台进程,只要哪个进程发生问题,EVMD就会把事件写入trace文件。
EVMD称作事件管理守护进程
(4)ONS 事件发布及订阅进程:全称 Oracle Notification Service,作用为快速通知事件的发布及订阅服务
3.说一下在RAC环境下,数据库实例会多出哪些后台进程,用ps命令查找,给出输出结果,并说明它们的作用。
RAC模式下Oracle数据库比单节点要多出许多后台进程,这些后台进程都是用于集群管理和监控的,下面我们简单介绍一下它们的作用。
(1)LMSn - gobal cache service process 全局缓存服务进程小n从零开始分配
1)RAC提供了10个LMS进程,会随着节点间消息传递的数据量的增加而增加,默认至少有2个LMS进程
2)LMS进程主要管理集群内数据块的访问,并在不同实例的buffer cache中传递数据块镜像
3)LMS进程保证了每一时刻只允许一个实例去修改数据块
4)当一个实例请求数据块时,拥有该资源的实例的LMS进程会创建一个数据块镜像的一致性读。然后把该数据块传递到请求资源的实例的buffer cache中。
(2)LMON - Global Enqueue Service Monitor 全局队列服务监控进程
1)监控整个集群的内存结构
2)处理异常终止的进程和实例
3)当有实例加入集群和离开集群时,全局锁定和资源的重新分配
4)提供全局锁资源的恢复操作
5)监控全局的锁资源处理死锁和阻塞
(3)LCK - LOCK Process
1)LCK进程主要用来管理实例间资源请求和跨实例调用操作,调用操作包括数据字典等对象的访问
2)处理非cache fusion 的cache资源请求,像 dictionary cache或row cache
(4)LMD – Global Enqueue Service Daemon全局队列服务守护进程
1)LMD进程主要管理对全局队列和资源的访问,并更新相应队列的状态,处理来自于其他实例的资源请求。
2)每一个全局队列的当前状态存储在相应的实例共享内存中,该状态表明该实例具有相应的权利使用该资源。
3)LMD进程还负责队列的死锁问题
(5).DIAG – Diagnostic Daemon 诊断守护进程
1)Oracle10g新的后台进程
2)主要用来捕获实例中失败进程的诊断信息,并生成相应的trace文件
3)此进程不需要配置,自动启动无需调整
4)如果该进程失败则自动重启
具体进程结构请参考下面的图示
我们使用ps命令输出10g和11g的RAC实例后台进程
10g RAC特有进程:
$ ps -ef|grep ora_
oracle 4721 1 0 Feb26 ? 00:00:00 ora_diag_ONEPIECE1
oracle 4725 1 0 Feb26 ? 00:02:26 ora_lmon_ONEPIECE1
oracle 4727 1 0 Feb26 ? 00:00:02 ora_lmd0_ONEPIECE1
oracle 4729 1 0 Feb26 ? 00:00:01 ora_lms0_ONEPIECE1
oracle 4733 1 0 Feb26 ? 00:00:01 ora_lms1_ONEPIECE1
oracle 4761 1 0 Feb26 ? 00:00:07 ora_lck0_ONEPIECE1
oracle 4772 1 0 Feb26 ? 00:00:00 ora_asmb_ONEPIECE1
oracle 4776 1 0 Feb26 ? 00:00:00 ora_rbal_ONEPIECE1
oracle 4840 1 0 Feb26 ? 00:00:00 ora_o001_ONEPIECE1
11g RAC特有进程:
$ ps -ef|grep ora_
oracle 426 1 0 Feb27 ? 00:00:08 ora_o000_RAC11G21
oracle 9082 1 0 Feb25 ? 00:01:09 ora_diag_RAC11G21
oracle 9086 1 0 Feb25 ? 00:00:27 ora_ping_RAC11G21
oracle 9088 1 0 Feb25 ? 00:00:06 ora_acms_RAC11G21
oracle 9092 1 0 Feb25 ? 00:05:27 ora_lmon_RAC11G21
oracle 9094 1 0 Feb25 ? 00:01:32 ora_lmd0_RAC11G21
oracle 9096 1 0 Feb25 ? 00:02:07 ora_lms0_RAC11G21
oracle 9100 1 0 Feb25 ? 00:00:06 ora_rms0_RAC11G21
oracle 9102 1 0 Feb25 ? 00:00:14 ora_lmhb_RAC11G21
oracle 9116 1 0 Feb25 ? 00:00:09 ora_rbal_RAC11G21
oracle 9118 1 0 Feb25 ? 00:00:05 ora_asmb_RAC11G21
oracle 9136 1 0 Feb25 ? 00:04:25 ora_lck0_RAC11G21
oracle 9138 1 0 Feb25 ? 00:00:14 ora_rsmn_RAC11G21
oracle 9295 1 0 Feb25 ? 00:00:07 ora_gtx0_RAC11G21
oracle 9297 1 0 Feb25 ? 00:00:07 ora_rcbg_RAC11G21
4.画图说明,当RAC中的一个实例down掉之后,其它实例是如何接管这个实例上的事务的?
如下图所示:我们现在拥有2个节点,我们在这2个节点上部署RAC集群,每个节点上创建一个实例,这2个节点使用内联网传输数据和信息,同时共享一个存储磁阵。介绍完了RAC架构,下面叙述一下RAC的实例级容错。
场景:在生产使用中,突然instance1 shutdown,那么在其上面没有完成的事物如何处理呢。
(1)当实例1 crash后,实例2通过VIP就可以知道实例1已经down了。
(2)此时需要处理的有2部分数据,一部分是commit的数据,一部分非commit数据
(3)对于已经commit写入redo日志但是还没有来得及写入数据文件的记录,实例2可以访问实例1的redo log并从最后一次check point之后的信息开始实例恢复。把数据同步到最新状态。
(4)对于没有commit的数据利用undo旧映像进行回滚事物。