CRS启动报错Failed 3 to bind listening endpoint

客户的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,问题解决。

This entry was posted in ORACLE and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *