在一台机器上安装 oracle,发现listener总是无法启动,查看跟踪日志
<msg time='2011-10-21T06:53:17.324+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='whdbtest205.yihaodian.com'
host_addr='UNKNOWN'>
<txt>TNS-12531: TNS:cannot allocate memory
</txt>
</msg>
<msg time='2011-10-21T06:53:17.325+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='whdbtest205.yihaodian.com'
host_addr='UNKNOWN'>
<txt>21-OCT-2011 06:53:17 * 12531
</txt>
</msg>
<msg time='2011-10-21T06:53:17.325+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='whdbtest205.yihaodian.com'
host_addr='UNKNOWN'>
<txt>TNS-12531: TNS:cannot allocate memory
</txt>
</msg>
上面报告是cannot allocate memory,但是查看内存使用情况,不应该是内存不足造成的
最后 google到了类似的一个案例,作者说是hostname设置不当导致的。
查看了一下该机器的hostname配置
[oracle@justin alert]$ more /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=justin
[oracle@justin alert]$ 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
::1 localhost6.localdomain6 localhost6
发现hostname 205并未在/etc/hosts中出现,于是将两者设置成一样并重启,问题解决了。
但是仍有很大的疑惑,为何/etc/hosts里不设置hostname就可以导致listener无法正常启动?
于是在另外一台机器上做测试,用strace分别跟踪hostname设置正常和设置异常情况下listener启动日志,发现listener启动过程中确实要读到hostname参数,而且要打开/etc/hosts配置文件
但是依旧没有搞清楚究竟是哪一步导致listener无法启动