假如使用ASM做为Oracle数据库的数据存储方式,那么Oracle数据库是怎么来识别ASM的diskgroup的呢,也就是数据库的instanc和ASM的instance之间是如何沟通的呢?简单的说,就是ocssd(Oracle Cluster Support Services daemon)。本文假设为Linux环境下的RAC+ASM系统。
对于ASM来说,ocssd是必须的,所以在使用dbca创建ASM Instance的时候,就会提示要先安装ocssd。如果是单机,执行$ORACLE_HOME/bin/localconfig add安装ocssd。ocssd通过inittab自动启动,在安装的时候就会在/etc/inittab中加入以下条目(rac环境):
其中,35表示在os的运行级别(runlevel)为3或者5的时候启动/etc/init.d/init.cssd
respawn表示init.cssd进程如果异常终止,则自动重新启动
ocssd进程启动后会打开一系列的文件(通过/proc/pid/fd或者lsof -a -p pid可以获得filedescriptor的信息):
消息文件
– $CRS_HOME/srvm/mesg/procus.msb
– $CRS_HOME/css/mesg/clssus.msb
– $CRS_HOME/has/mesg/clsdus.msb
日志文件
– $CRS_HOME/log/hostname/cssd/cssdOUT.log
– $CRS_HOME/log/hostname/cssd/ocssd.log
– $CRS_HOME/log/hostname/alertSID.log
OCR(Oracle Cluster Registry),本例中在裸设备上,如果是单机也可能在本地文件系统中,典型路径$ORACLE_HOME/cdata/localhost/local.ocr
– /dev/raw/raw1
– /dev/raw/raw2
以及一些socket端口
– socket:[578057]
– socket:[578062]
…
ASM instace启动以后,通过gmon进程和osccd通信,将ASM的一些信息告诉给ocssd,而数据库则从ocssd获得这些信息,也就是说,ocssd是ASM Instance和Database之间的纽带。
ASM/ocssd/database之间具体通信的步骤,可以参考这里。
太专业了
ASM的几个关键进程:ASMB,RBAL,ARBx
ASM instance通过ASMB跟CSS进程进行通信
RBAL负责磁盘组之间的协调和rebalance
ARBx就是worker进程了,v$asm_operation就是从这里来的。
当然,在10.2是这样的。
棒!技术在于总结!
顺便问下,在node1添加了disk,node2知道并可用该disk,这个过程也是通过ocssd喽?
看了下原文,如果能把原文剩下的部分也翻过来就好了!