ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 手工修改tnsnames.ora引起的故障一例

手工修改tnsnames.ora引起的故障一例

原创 Linux操作系统 作者:realkid4 时间:2011-05-14 16:03:31 0 删除 编辑

 

Oracle最早是依赖Unix/Linux为基础成长起来,很多时候环境配置中带有一些文本配置的痕迹。我们在进行配置和更改时,一定要注意细节、注意方法,否则可能会引发的一些故障问题。

 

下午一个开发组同事来找我帮忙,说连接数据库失败。不知道什么问题?笔者到本地机器上看,发现故障现象如下。

 

故障现象

 

连接数据库服务Orcl,本地NET服务名为orcl

 

1、使用客户端连接失败

 

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 5 14 15:19:19 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

SQL> conn scott/tiger@orcl;

ERROR:

ORA-12154: TNS: 无法解析指定的连接标识符

 

 

2、tnsping错误

 

尝试使用底层的配置连接tnsping工具。

 

//连接orcl服务

C:\Documents and Settings\Administrator>tnsping orcl

 

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 14-52011 15:11:59

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

 

已使用的参数文件:

D:\oracle\network\admin\sqlnet.ora

 

TNS-03505: 无法解析名称

 

 

 

3Net Configuration Assistant工具工作错误

 

开启neca工具,发现能够开启,但是点击next无反应。

 

故障分析

 

tnsping工具不能正确解析orcl服务名称,认为至少是客户端连接的配置出现问题,而且从其他机器上连接服务器没有任何问题。所以是判定tnsnames.ora文件的故障。

 

tnsnames.oralistener.oraOracle Net Service的两个核心文件。Listener.ora负责进行服务端监听器的配置。其中定义了Oracle数据库服务器的监听器监听端口等信息。在静态注册时代,listener.ora中甚至包括了监听器中注册的数据库实例服务。

 

Tnsnames.ora中配置的本地客户端上的名称映射。包括了连接特定IP地址上的特定端口上监听器的地址,还有希望连接的服务Service名称。

 

和同事沟通之后,得知是之前手工修改过tnsnames.ora文件。所以猜想问题就出现在此处。

 

打开位于$ORACLE_HOME/NETWORK/ADMIN上的tnsnames.ora文件,发现如下片段。

 

//tnsnames.ora文件片段

 ORCL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

  )

 

 

开头的ORCL命名出现问题,前方出现空格。这个是违反tnsnames.ora中定义的格式要求的。

 

Tnsnames.ora中定义的内容,根据Oracle的要求是不允许直接书写的。而是要求使用相关专用工具来进行配置。配置本地NET服务是有对应的规则的,就目前研究出的结果,包括两条:

 

ü        本地Net名称必须要顶行头书写。就是定义的Net名称必须为所在行的第一个字符,不能有空格;

ü        配置信息的嵌套括号中,只有最外层的括号允许顶头书写,其他不允许顶头书写。注意:最外层括号是允许不顶头书写的;

 

参考两条规则,可以发现该片段明显是违反了第一条规则。

 

 

修改故障

 

发现了问题,就容易解决了。将orcl前面的空格去掉,保存文件。

 

//修改之后内容

ORCL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))

)

 

 

之后验证连接信息。

 

 

C:\Documents and Settings\Administrator>tnsping orcl

 

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 14-5 -2011 15:55:16

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

 

已使用的参数文件:

D:\oracle\network\admin\sqlnet.ora

 

已使用 TNSNAMES 适配器来解析别名

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))

OK (70 毫秒)

 

 

 

解析成功,验证登录。

 

 

SQL> conn scott/tiger@orcl;

已连接。

SQL>

 

 

 

故障解决!

 

结论:

 

oracle的配置规则是比较复杂的,涉及到数据库、网络、安全等等多方面。一般情况下,我们尽可能要使用提供的GUI工具进行配置,特别是一些不熟悉的配置内容。当然,GUI并不能够解决所有的问题,在一些特殊的情况下,比如没有UI界面、或者进行比较复杂的配置内容时,我们是可以进行手工的配置的。但是一定要注意保存备份文件和熟悉配置项,避免出现故障。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-695267/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7676919