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

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-5月2011 15:11:59

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

 

已使用的参数文件:

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

 

TNS-03505: 无法解析名称

 

 

 

3、Net Configuration Assistant工具工作错误

 

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

 

故障分析

 

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

 

tnsnames.ora和listener.ora是Oracle 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界面、或者进行比较复杂的配置内容时,我们是可以进行手工的配置的。但是一定要注意保存备份文件和熟悉配置项,避免出现故障。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值