修改主机名后如何启动使用ASM存储的数据库

最近修改一台安装了ASM实例以及基于ASM存储的数据库主机名(RHEL 5),当启动ASM实例的时候,出现了如下的报错信息
[oracle@dev112 ~]$ export ORACLE_SID=+ASM
[oracle@dev112 ~]$ sqlplus / as sysdba
SQL> startup
ORA-29701: unable to connect to Cluster Manager

当查看系统进程时,可以发现OCSSD进程没有运行
[root@dev112 ~]# ps -ef | grep cssd
root      4936     1 0 09:07 ?        00:00:00 /bin/sh /etc/init.d/init.cssd run
root      2430 2365 0 11:49 ?        00:00:00 /bin/sh /etc/init.d/init.cssd startcheck
root      5623 4836 0 09:14 pts/0    00:00:00 grep cssd

OCSSD进程启动后正常的进程应当包含
oracle    2878 2781 0 22:30 ?        00:00:00 /u01/oracle/product/10.2/bin/ocssd.bin

根据ASM实例启动报错信息以及系统进程信息,我们可以确定ASM实例无法启动这是由于OCSSD进程在修改主机名后无法正常启动的原因。

什么是OCSSD
OCSSD是Oracle Cluster Synchronization Service Daemon的缩写,有的文档也将它认为是Oracle Cluster Support Services Daemon的缩写,这只是文档的不一致而已。从名称可以得知,OCSSD将实现一些系统集群所需要的功能,具体地,它负责实现Oracle数据库实例与ASM实例之间的通讯。当ASM实例启动以后,通过GMON进程和OSCCD通信,将ASM的一些信息告诉OCSSD,而数据库则从OCSSD获得这些信息。

在单机上,通过执行$ORACLE_HOME/bin/localconfig add即可以安装OCSSD,在这个过程中,OCR(Oracle Cluster Registry)将被创建。OCR包含了集群节点列表、实例到节点的映射信息以及集群提供给应用程序的资源概要。之后,OCSSD进程的启动是通过/etc/inittab(Linux)中如下的一行记录。
h1:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1 </dev/null

启动后OCSSD进程将打开一些文件描述符,包括消息文件、日志文件、OCR文件、本地文件系统套接字、网络套接字这几种类型。

OCSSD为何无法启动
当查看OCSSD的启动控制脚本/etc/init.d/init.cssd时,可以看到它使用/bin/logger将日志记录到了系统日志中,那么我们先来查看一下系统日志。
[root@dev112 ~]# more /var/log/message
Nov 25 11:49:54 dev112mod logger: Oracle Cluster Ready Services starting up automatically.
Nov 25 11:49:56 dev112mod logger: Cluster Ready Services waiting on dependencies. Diagnostics in /tmp/crsctl.2430.

查看上述中的/tmp/crsctl.2430文件
[root@dev112 ~]# more /tmp/crsctl.2430
Failure in CSS initialization opening OCR.

这是/etc/init.d/init.cssd脚本的startcheck选项在执行$ORACLE_HOME/bin/crsctl check boot时出错而产生的,这个错误就是因为修改了主机名而导致OCR的失效,OCR默认的保存位置是$ORACLE_HOME/cdata/localhost/local.ocr。这个时候,就需要重新创建新的OCR,在单机环境中,可以使用$ORACLE_HOME/bin/localconfig reset命令。
具体操作
在Oracle安装用户下确定ORACLE_HOME值
# su - oracle
$ echo $ORACLE_HOME
/u01/oracle/product/10.2

切换到root用户,重新配置OCSSD进程
$ su - root
$ /u01/oracle/product/10.2/bin/localconfig reset

之后就可以正常启动ASM实例和数据库了。

参考
[1] How an ASM diskgroup is found by the database.
http://frits.homelinux.com/wordpress/?p=34
[2] Oracle数据库如何识别ASM磁盘组
http://www.ningoo.net/html/2008/how_an_asm_diskgroup_found_by_oracle_database.html
[3] Modifying the VIP or VIP Hostname of a 10g or 11g Oracle Clusterware Node
http://space.itpub.net/12361284/viewspace-616738

你可能感兴趣的:(oracle,linux,wordpress,网络应用,脚本)