listener.ora,tnsnames.ora中一个空格的威力

最近几天被网络监听配置搞得焦头烂额,有时候配置没问题,有时候就出莫名其妙的问题,今天专门花时间总结了一下,希望对大家有所帮助。

listener.ora,tnsnames.ora有时候没有netca,netmgr这样的图形工具来创建的时候,只能手工来做,手工做的时候会有一些格式的问题,多加一个空格,或者少一个空格,就会有不同的结果。

案例一

下面是一个监听的基本配置,我故意在前面多加了一个空格(黄色标记所示)。

 LISTE1=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521)
 )
 )
)
SID_LIST_LISTE1=
(SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=PROD)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME=PROD)
 )
)

启动的时候非常缓慢,然后报出了没有监听liste1的信息。这种情况跟没有listener.ora的情况下直接起监听的结果一样,说明解析Listener.ora的时候,没有找到相关的listener信息。

LSNRCTL> start liste1
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/liste1.log
TNS-01151: Missing listener name, liste1, in LISTENER.ORA
Listener failed to start. See the error message(s) above...

然后删除那个空格后,监听启动就没有问题。

案例二

在倒数第2行的右括号,一个是顶格的,一个前面有一个空格。

LISTE1=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
 )
)
SID_LIST_LISTE1=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=PROD)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME=PROD)
)
)

启动监听的时候,报出了另外的错误,说sid_list_liste1的地方有问题。错误信息如下:

LSNRCTL> start liste1
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/liste1.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521)))
TNS-01155: Incorrectly specified SID_LIST_liste1 parameter in LISTENER.ORA
 NL-00303: syntax error in NV string
Listener failed to start. See the error message(s) above...

如果改成如下的形式,多加了一个空格,监听启动就没有问题了。

LISTE1=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
 )
)
SID_LIST_LISTE1=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=PROD)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME=PROD)
 )
)

案例三

有的朋友可能说你这个钻牛角尖了,如果是倒数第三行,第四行的话行不行?

我试了一下,故意把address后面的右括号放到了下一行,然后顶格。

LISTE1=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521)
)
 )
)

启动监听的时候还是报错,这次貌似指向的错误信息更明确了。

LSNRCTL> start liste1
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/liste1.log
TNS-01150: The address of the specified listener name is incorrect
Listener failed to start. See the error message(s) above...

改成如下的形式,监听马上好了。

LISTE1=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521)
 )
 )
)

案例四

Listener.ora的情况在tnsnames.ora里也是一样的情况,不过报错是ORA的错误,有一个好处是都是ORA-12154错误。

PROD=
(DESCRIPTION= 
 (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
 (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1525))
 (CONNECT_DATA=(SERVICE_NAME=PROD)
)
)
[oracle@oel1 admin]$ sqlplus system/oracle@PROD
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 1 16:55:03 2013
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

案例五

多加一个空格,报错也是ora-12154

 PROD=
(DESCRIPTION= 
 (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
 (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1525))
 (CONNECT_DATA=(SERVICE_NAME=PROD))
)
[oracle@oel1 admin]$ sqlplus system/oracle@PROD
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 1 17:28:47 2013
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

成功例子

最后贴出能够正确识别的Listener.ora和tnsnames.ora (格式当然不是很好)

listener.ora
LISTE1=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521)
 )
 )
)
SID_LIST_LISTE1=
(SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=PROD)
      (ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME=PROD)
 )
)
tnsnames.ora
PROD=
(DESCRIPTION= 
 (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1521))
 (ADDRESS=(PROTOCOL=tcp)(HOST=oel1.oracle.com)(PORT=1525))
 (CONNECT_DATA=(SERVICE_NAME=PROD))
)

来一个成功连接的例子收尾:

[oracle@oel1 admin]$ sqlplus system/oracle@PROD
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 1 17:00:46 2013
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

10g,11g中的数据库克隆安装(r6笔记第7天)

有时候在很多工作环境中,如果彼此几个机器的配置相似,我们就可以不用一遍又一遍的安装数据库软件了,我们可以为了更快的完成安装工作,在静默安装,图形安装的选择之外,...

2898
来自专栏SAP梦心的SAP分享

Oracle研究专题:Oracle系统安装与配置

最近开始研究Oracle数据库,盖因公司的系统要么Oracle要么是mysql吧。 作为一个IT工作者,没有碰过Oracle是一件很匪夷所思得事情。 想到过去几...

1879
来自专栏杨建荣的学习笔记

生产系统中EXP-00000的问题及解决(66天)

早上刚来的时候,客户的dba就急忙找到我说生产系统exp出问题了。exp的时候报了错误,让我帮着看一下。 > exp xxxxx file=tui.dmp l...

2966
来自专栏Kubernetes

原 荐 Flannel是如何工作的

Author: xidianwangtao@gmail.com 概述 最近我们的TaaS平台遇到很多的网络问题,事实证明“contiv + ovs + v...

49710
来自专栏Hadoop数据仓库

配置 Oracle 透明网关访问 SQL Server

试验环境: OS:XP Oracle 10.1 SQLSERVER2000 HOSTNAME:home-30b98e1e20 都使用 tcp/ip 默认端口 ...

2007
来自专栏高性能分布式系统设计

Clojure 启动出错

X:\clojure-1.3.0>java -cp clojure.jar main Exception in thread "main" java.lang....

3216
来自专栏杨建荣的学习笔记

关于listener无法启动的问题解决

今天照例开始学习oracle,实例启动了,但是listener却突然很奇怪,怎么都起不来。 我检查了下listener配置,网络配置,ssh服务,一切都正常,最...

3368
来自专栏菩提树下的杨过

Oracle Coherence应用部署到Jboss EAP 6.x 时 NoClassDefFoundError: sun/rmi/server/MarshalOutputStream 的解决办法

今天将一个web应用从weblogic 10.3迁移到jboss EAP 6.3上,该应用使用oracle coherence做为缓存,部署上去后,启动时一直报...

1789
来自专栏乐沙弥的世界

Linux/Unix shell 脚本中调用SQL,RMAN脚本

        Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix ...

531
来自专栏xingoo, 一个梦想做发明家的程序员

【java.lang.UnsupportedClassVersionError】版本不一致出错

  这种错误的全部报错信息: 1 java.lang.UnsupportedClassVersionError: org/apache/lucene/stor...

17010

扫描关注云+社区