Oracle数据库如何识别ASM磁盘组

假如使用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环境):

h2:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1

其中,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之间具体通信的步骤,可以参考这里



无觅相关文章插件,快速提升流量

4条评论

  • At 2008.06.22 13:21, 李海鑫 said:

    太专业了

    • At 2008.06.22 22:24, ricky said:

      ASM的几个关键进程:ASMB,RBAL,ARBx
      ASM instance通过ASMB跟CSS进程进行通信
      RBAL负责磁盘组之间的协调和rebalance
      ARBx就是worker进程了,v$asm_operation就是从这里来的。

      当然,在10.2是这样的。

      • At 2008.07.01 17:10, Rain_At_DNA said:

        棒!技术在于总结!

        顺便问下,在node1添加了disk,node2知道并可用该disk,这个过程也是通过ocssd喽?

        • At 2008.07.01 19:08, Rain_At_DNA said:

          看了下原文,如果能把原文剩下的部分也翻过来就好了!


          (Required)
          (Required, will not be published)