今天在群里碰见了一个ORA-12154的问题,在此记录一下解决过程
起因是群里面一个人问了他的Windows客户端采用easy connect方式连接Oracle服务器的时候,报错如下:
ORA-12154:TNS:无法解析指定的连接标示符
最初的想法是在服务器端的listener没有相关的service_name来接收请求,不过他后来给出的截图表明,确实有相关的service_name来接收这个请求。
而使用同样的easy connect语句,在另外一台服务器上,却是能够成功连接的。那么就说明是这台windows客户端的问题了
找了相关资料之后把问题锁定在了sqlnet.ora文件的一个参数上:
NAMES.DIRECTORY_PATH
查找文件找出这个文档的功能描述如下(具体可以参考:http://docs.oracle.com/cd/B19306_01/network.102/b14213/sqlnet.htm#sthref370):
Use the parameter NAMES.DIRECTORY_PATH to specify the order of the naming methods used for client name resolution lookups.
DEFAULT:
NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname)
VALUES:
tnsnames local naming naming method
ldap directory naming naming method
ezconnect or hostname easy connect naming or host naming method
CDS CDS external naming method
nis Network information service(NIS) external naming method
从上文的说明当中,可以看到的是,该参数是指定客户端的命名方法的
针对如上问题,做了下面这个实验:
现在在使用tnsnames和Easy Connect都能正常连接客户端上将NAMES.DIRECTORY_PATH参数修改为如下值:
NAMES.DIRECTORY_PATH = (TNSNAMES)
然后我们在使用Easy Connect的连接方式进行连接,会发现:
D:>sqlplus mai/mai@192.168.0.123:1521/test
SQL*Plus: Release 10.2.0.3.0 - Production on 星期五 8月 2 17:42:12 2013
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
ERROR:
ORA-12154: TNS: 无法解析指定的连接标识符
请输入用户名:
好吧,就是这样。这个时候如果使用tnsnames进行连接的话,是依旧可以正常连接的
我们如果将参数修改为:
NAMES.DIRECTORY_PATH = (TNSNAMES,EZCONNECT)
Easy Connect连接方式可以正常连接
总结,在默认情况下,即使我们不配置NAMES.DIRECOTRY_PATH参数的话,我们依然可以用easy connect的连接方式连接Server端的,不过如果出现配置错误或者客户端类似的异常情况的话,这不失是一种解决方式
相关阅读:
SPFILE 错误导致数据库无法启动(ORA-01565)
ORA-01172、ORA-01151错误处理
ORA-00600 [2662]错误解决
ORA-01078 和 LRM-00109 报错解决方法
ORA-00471 处理方法笔记
ORA-00314,redolog 损坏,或丢失处理方法
ORA-00257 归档日志过大导致无法存储的解决办法