1.说一下RAC和单节点数据库的区别有哪些?你认为RAC最有用的功能是说什么?
(1):RAC具有2个或者2个以上的实例,可以增减节点;而单节点数据库有且只有一个实例
(2):RAC有多个实例,也就是有多个节点,每个节点都就有自己一套SGA,后台进程,而redo log和undo tablespace必须可以被此集群中的任意节点访问 ;而单节点只有一套供自己使用
(3):RAC节点之间通过专有网络连接,一般是千兆网络或者光纤互联,供节点之间的数据块传递使用;单节点不需要专有网络
(4):RAC必须使用共享存储设备,存放数据文件等;单节则可以不需要共享存储设备
RAC最有用的功能:
(1):实例节点之间的容灾,提供实例的高可以,只要有一个实例不宕机,业务依然可以继续访问
(2):在设计比较良好和存储设备不是瓶颈的前提下,RAC是可以提高业务并发访问以及访问速度的
2.用ps命令查到属于crs集群软件的进程名称,贴出输出结果。
crs集群软件的进程是安装好集群软件后就有的,和RAC数据库存在与否无关,以下是Oracle 11.2.0.3下的crs集群进程
[grid@rac1 ~]$ ps -ef |grep /u01/app/11.2.0.3/grid/bin
root 2985 1 0 14:22 ? 00:00:03 /u01/app/11.2.0.3/grid/bin/ohasd.bin reboot
grid 3256 1 0 14:23 ? 00:00:01 /u01/app/11.2.0.3/grid/bin/oraagent.bin
grid 3268 1 0 14:23 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/mdnsd.bin
grid 3280 1 0 14:23 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/gpnpd.bin
grid 3290 1 0 14:23 ? 00:00:01 /u01/app/11.2.0.3/grid/bin/gipcd.bin
root 3302 1 0 14:23 ? 00:00:02 /u01/app/11.2.0.3/grid/bin/orarootagent.bin
root 3314 1 0 14:23 ? 00:00:01 /u01/app/11.2.0.3/grid/bin/osysmond.bin
root 3327 1 0 14:23 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/cssdmonitor
root 3341 1 0 14:23 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/cssdagent
grid 3353 1 1 14:23 ? 00:00:04 /u01/app/11.2.0.3/grid/bin/ocssd.bin
root 3474 1 0 14:23 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/octssd.bin reboot
grid 3512 1 0 14:23 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/evmd.bin
root 3885 1 0 14:25 ? 00:00:01 /u01/app/11.2.0.3/grid/bin/crsd.bin reboot
grid 3982 3512 0 14:25 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/evmlogger.bin -o /u01/app/11.2.0.3/grid/evm/log/evmlogger.info -l /u01/app/11.2.0.3/grid/evm/log/evmlogger.log
grid 4044 1 0 14:25 ? 00:00:01 /u01/app/11.2.0.3/grid/bin/oraagent.bin
root 4048 1 0 14:25 ? 00:00:01 /u01/app/11.2.0.3/grid/bin/orarootagent.bin
grid 4429 1 0 14:27 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/tnslsnr LISTENER -inherit
root 4600 1 1 14:28 ? 00:00:00 /u01/app/11.2.0.3/grid/bin/ologgerd -m rac2 -r -d /u01/app/11.2.0.3/grid/crf/db/rac1
grid 4680 4347 0 14:29 pts/1 00:00:00 grep /u01/app/11.2.0.3/grid/bin
3.说一下在RAC环境下,数据库实例会多出哪些后台进程,用ps命令查到,给出输出结果,并说明它们的作用。
1.LMSn - gobal cache service process 全局缓存服务进程 小n从零开始分配
1)RAC提供了10个LMS进程,会随着节点间消息传递的数据量的增加而增加,默认至少有2个LMS进程
2)LMS进程主要管理集群内数据块的访问,并在不同实例的buffer cache中传递数据块镜像
3)LMS进程保证了每一时刻只允许一个实例去修改数据块
4)当一个实例请求数据块时,拥有该资源的实例的LMS进程会创建一个数据块镜像的一致性读,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
3) 由于LMS进程负责主要的锁管理功能,所以每个实例只有一个LCK进程
4.LMD – Global Enqueue Service Daemon 全局队列服务守护进程
1)LMD进程主要管理对全局队列和资源的访问,并更新相应队列的状态,处理来自于其他实例的资源请求。
2)每一个全局队列的当前状态存储在相应的实例共享内存中,该状态表明该实例具有相应的权利使用该资源。
3)LMD进程还负责队列的死锁问题
5.DIAG – Diagnostic Daemon 诊断守护进程
1)Oracle10g新的后台进程
2)主要用来捕获实例中失败进程的诊断信息,并生成相应的trace文件
3)此进程不需要配置,自动启动无需调整
4)如果该进程失败则自动重启
[grid@rac1 ~]$ ps -ef |grep ora_
oracle 14472 1 0 23:06 ? 00:00:01 ora_diag_chris1
oracle 14482 1 0 23:06 ? 00:00:02 ora_lmon_chris1
oracle 14484 1 0 23:06 ? 00:00:03 ora_lmd0_chris1
oracle 14486 1 1 23:06 ? 00:00:15 ora_lms0_chris1
oracle 14508 1 0 23:06 ? 00:00:00 ora_asmb_chris1
oracle 14526 1 0 23:06 ? 00:00:05 ora_lck0_chris1
4.画图说明,当RAC中的一个实例down掉之后,其它实例是如何接管这个实例上的事务的?
从图看来:node1和node2通过专有网络和公共网络互连,以及共同使用一个存储设备,redo,undo,data files ,control file都存放在共享存储上,现在node1宕机了
(1)node2上的LMON监控进程通过专用网络测试node1的连通性,发现node1无响应,之后通过仲裁磁盘表决,最后将node1从集群中移除
(2)node2读取共享存储上node1的最后一次checkpoint之后的redo日志文件信息,将提交或未提交的事务全部重做一遍,将数据更新到最新状态
(3)node2读取共享存储上node1的undo段,回滚其未提交的事务,实例恢复完毕。