代码改变世界

TNS-12541: TNS:no listener TNS-12560 TNS-00511: No listener

2014-03-10 11:24  潇湘隐者  阅读(28099)  评论(0编辑  收藏  举报

    为了测试需要,系统管理员帮忙将一台ORACLE数据库服务器克隆到虚拟机上,我上去删除了root、oracle、tomcat账号下的crontab定时作业,然后启动了ORACLE数据库实例,删除了ORACLE下的作业,然后启动监听时报如下错误:

[oracle@EGMLNX02 admin]$ lsnrctl stop

LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 10-MAR-2014 09:15:44

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=EGMLNX02.egm1.esquel.com)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 2: No such file or directory

检查了监听配置文件listener.ora, 发现没有问题.Google搜索了一下: 这个错误跟Linux的主机名和IP配置有关系,于是赶紧检查:

[oracle@EGMLNX02 admin]$ hostname
EGMLNX02.egm1.esquel.com
[oracle@EGMLNX02 admin]$ more /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=EGMLNX02.egm1.esquel.com

image

结果发现主机名和IP配置文件 hosts里面,不知道是系统管理员手误还是其它原因,在hosts文件,127.0.0.1配置里面多了一项EGMLNX02(应该为三项),结果导致ORACLE数据库监听服务器启动报错


关于主机名和IP配置文件,一般情况下hosts文件的每行为一个主机,每行由三部份组成,每个部份由空格隔开。其中#号开头的行做说明,不被系统解释。
第一部份:网络IP地址;
第二部份:主机名或域名;
第三部份:主机名别名;

于是修改hosts文件,然后重新启动监听,OK,文件解决了。