客户的10.2 RAC for Linux x86-64环境,计划停机后,尝试启动CLUSTER和DB,在一个节点上启动成功,但是另一个节点启动报错。
检查没有成功启动的节点,发现CLUSTER启动在/tmp目录下留下了记录:
[root@smsdbrac1 root]# cd /tmp [root@smsdbrac1 tmp]# ls -l total 20 -rw-r--r-- 1 oracle dba 78 Nov 30 00:30 crsctl.14429 -rw-r--r-- 1 oracle dba 78 Nov 30 00:30 crsctl.14509 -rw-r--r-- 1 oracle dba 78 Nov 30 00:30 crsctl.14578 srwxr-xr-x 1 ncli ncli 0 Oct 8 15:22 mapping-ncli srwxr-xr-x 1 oracle dba 0 May 5 2008 mapping-oracle srwxr-xr-x 1 root root 0 May 14 2008 mapping-root drwx------ 2 gdm gdm 4096 Oct 8 15:40 orbit-gdm drwx------ 2 oracle dba 4096 Oct 10 16:07 orbit-oracle [root@smsdbrac1 tmp]# more crsctl.14429 Failed 3 TO bind listening endpoint: (ADDRESS=(PROTOCOL=tcp)(HOST=dbprv1)) |
如果CLUSTER在启动时就报错,说明多半是操作系统或者硬件的配置上存在问题,而从这个信息上看,似乎与网络的配置有关。
由于这次计划停机本身就是要更换交换机,所以首先检查两个服务器是否可以正常连通,以及IP地址的配置是否存在问题。
在排除了这些可能性后,到MOS中查询了一下这个问题。
首先看到的问题和TNS_ADMIN环境变量有关,如果oracle用户设置了这个环境变量,且这个环境变量指定的目录下的sqlnet.ora设置了某些网络相关的参数,那么就会导致这个错误的产生。检查确实发现oracle用户设置了TNS_ADMIN环境变量:
[root@smsdbrac1 tmp]# env|grep TNS [root@smsdbrac1 tmp]# su - oracle [oracle@smsdbrac1 oracle]$ env|grep TNS TNS_ADMIN=/opt/oracle/product/10.2.0/db/network/admin [oracle@smsdbrac1 oracle]$ more /opt/oracle/product/10.2.0/db/network/admin/ afiedt.buf listener.ora samples shrept.lst tnsnames.ora |
但是对应目录下并没有sqlnet.ora配置文件,不过处于稳妥,还是在oracle的启动shell中注释了这个环境变量的设置。
尝试启动CLUSTER,问题依旧。
在MOS上第二篇文章描述的问题是由于/etc/hosts文件的属性改变造成的,正常情况下,/etc/hosts的属性应该是(-rw-r–r–)。而检查客户服务器上该文件的配置,发现并不存在这个问题。
不过虽然这个文件本身的属性没有问题,但是检查这个文件的内容时,却发现了问题的端倪:
[root@dbrac1 tmp]# more /etc/hosts # Do NOT remove the following line, OR various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.200.11 dbrac1.5wan.com.cn dbrac1 192.168.200.13 dbvip1 192.168.0.201 dbprv1.5wan.com.cn dbrac1 192.168.200.12 dbrac2 192.168.200.14 dbvip2 192.168.0.202 dbprv2 |
很明显,当前节点的private ip对应的主机名出现了错误,这里不但出现了域名,而且最后出现的主机名和public ip对应的主机名出现了重复。显然这是人为修改造成的异常错误。
检查报错信息中主机名信息,可以发现出现错误的就是private ip对应的主机名,显然导致错误的原因是Oracle从/etc/hosts中找不到private ip对应的主机名的配置。
将/etc/hosts中错误的内容修正后,重启CLUSTER,问题解决。