Oracle ORA-12154: TNS:could not resolve service name错误的解决方法

原创 2007年09月27日 10:19:00
昨天一同事反映在使用Oracle9i时,在Net Assistant里配置服务名测试通过,但在使用SQL*PLUS等客户端工具时老是连接不上。

·首先检查服务名是否存在,发现服务名的确存在而且在Net Assistant中确实可以连接并测试通过。

·接下来用SQL*PLUS连接报错,错误显示:ORA-12154: TNS:could not resolve service name

·使用Oracle的tnsping命令测试报错,错误显示:TNS-03505: 未能分解名称

本人百思不得其解,只能上网google,多番查找之后终于找到了一篇文章,发现里面的情况和我的一摸一样。现摘录如下:

(尊重原创:作者博客地址为:http://blog.chinaunix.net/u1/44757/index.html)

以下内容为转载部分:
----------------------------------------------------------------------------------------------------------------------------------------
ORA-12154: TNS:could not resolve service name

错误指出客户不能查找到tnsnames.ora文件中所列举的服务。

查错误码显示:

ORA-12154: TNS:could not resolve service name
Cause: Oracle Net could not locate the net service name specified in the tnsnames.ora configuration file.

Action: Perform these steps:
1.Verify that a tnsnames.ora file exists.(See Also: "Localized Configuration File Support" for configuration file location information)

2.Verify that there are not multiple copies of the tnsnames.ora file.

3.In the tnsnames.ora file, verify that the net service name specified in your connect string is mapped to a connect descriptor.

4.Verify that there are no duplicate copies of the sqlnet.ora file.

5.If you are using domain names, verify that your sqlnet.ora file contains a NAMES.DEFAULT_DOMAIN parameter. If this parameter does not exist, you must specify the domain name in your connect string.

6.If you are not using domain names, and this parameter exists, delete it or disable it by commenting it out.

7.If you are connecting from a login dialog box, verify that you are not placing an "@" symbol before your connect net service name.

8.Activate client tracing and repeat the operation.


Cause: Oracle Net could not locate the database service name or net service name specified in the directory server.

Action: Perform these steps:
1.Verify that the database service or net service name entry exists in the directory that this computer was configured to use.
  (See Also: Chapter 8, "Setting Up Directory Server Usage" for directory setup instructions)

2.Verify that the sqlnet.ora file includes the following entry: NAMES.DIRECTORY_PATH=(ldap, other_naming_methods)
  根据文档中的提示第三步3.(1.2没问题了)检查tnsnames.ora文件中的服务名称是否正确的配置,经过检查(SERVICE_NAME = hatest)没有问题
  然后按照文档做第4.5步,到第6步时发现问题,sqlnet.ora文件中引用了domain域(注:我们这边没使用域)
  [oracle@localhost admin]$ cat sqlnet.ora
  # SQLNET.ORA Network Configuration File: /home/oracle/OraHome1/network/admin/sqlnet.ora
  # Generated by Oracle configuration tools.
  NAMES.DEFAULT_DOMAIN = localdomain
  NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)--这个没问题啦

  好了那还等什么编辑该文件把domain干掉。编辑完后赶快tnsping hatest
  [oracle@localhost admin]$ tnsping hatest
  TNS Ping Utility for Linux: Version 9.2.0.4.0 - Production on 26-APR-2007 16:33:39
  Copyright (c) 1997 Oracle Corporation.  All rights reserved.
  Used parameter files:
  /home/oracle/OraHome1/network/admin/sqlnet.ora
  Used TNSNAMES adapter to resolve the alias
  Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =  
  192.168.248.155)(PORT = 1521))) (CONNECT_DATA = (SID = hatest) (SERVER = DEDICATED)))
  OK (30 msec)

  没问题通了。再连接数据库

  [oracle@localhost admin]$ sqlplus hangan/hangan@hatest
  SQL*Plus: Release 9.2.0.4.0 - Production on Thu Apr 26 16:33:49 2007
  Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
  Connected to:
  Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
  With the Partitioning, OLAP and Oracle Data Mining options
  JServer Release 9.2.0.4.0 - Production
 
  SQL> exit
----------------------------------------------------------------------------------------------------------------------------------------

看了上面的描述之后,我按照步骤一步步检查,到了检查sqlnet.ora文件的时候,问题就出来了。原来这位同事的sqlnet.ora文件中是这样的:

# SQLNET.ORA Network Configuration File: C:/oracle/ora81/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DEFAULT_DOMAIN = eapac.ericsson.se

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (ONAMES)

可以看到这里只使用了ONAMES来查找服务,但他的服务是配置在tnsnames.ora文件中,当在SQL*PLUS中连接时,Oracle不是按tnsname的方式来查找,当然找不到服务了。

问题找到了,将NAMES.DIRECTORY_PATH 改为:
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)

再测试连接通过,问题解决。

在此要感谢博文的博主,也感觉文中的DBA解决问题的思路很清晰,看来自己离一个合格的DBA还有很长的距离,继续努力中。

相关文章推荐

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

 ORA-12154:TNS:无法解析指定的连接标识符 ORA-12154:TNS:无法解析指定的连接标识符   1问题的描述 Oracle11g server 64bit服...
  • minsenwu
  • minsenwu
  • 2015年04月26日 15:48
  • 50209

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

刚创建了一个数据库,准备用PL/SQL Developer登录时,出现如下错误信息:ORA-12154: TNS: 无法解析指定的连接标识符,(有时可能不会出现错误对话框,但也连不上,多试几次对会弹出...

oracle连接DBLINK报错:ORA-12154: TNS:could not resolve service name的解决办法

配置DBLINK细节很重要,请重点关注下面几点 1.确定被连接数据库可以连通,监听是好的 2.用户角色与权限 配置下面4项(很重要): dba,conn,create database link...

64位win7下PL/SQL Developer 报“ORA-12154: TNS:无法解析指定的连接标识符”问题的一个解决办法

接着上次的话题,在64位win7上装了32位oracle10g 以后又出现了新的问题:    在使用oracle自带的sqlplus连接本机或者远程的oracle实例均能成功过,但使用 PL/SQL ...

ORA-12154:TNS:监听程序无法识别连接描述符中请求的服务--用plsql和sqlplus都连接不上数据库了

OracleOraDb10g_home1TNSListener服务无法启动,启动后自动停止或者在XP服务中启动后显示“已启动”但是刷新后又回到停止状态。       解决方法:       首先查看服...

oracle 12154错误的处理办法

安装好oracle10客户端,配置好网络服务名称,用enterprsie manager console 连接服务器,一切正常,连接成功。   接着安装plsql developer,安装完成后,...
  • yipanbo
  • yipanbo
  • 2014年03月12日 13:16
  • 21828

ORA-12154: TNS:could not resolve service name

连Oracle数据库时,报错ORA-12154: TNS:could not resolve service name,将配置拷贝到其它人的机器上能连接。机器也能ping通。花了一些时间弄清楚这个问题...

安装oracle总结ORA-12154 TNS无法解析指定的连接标识符

今天装oracle安装都完成了,但出现了“ORA-12154 TNS”的错误,最开始以为是oracle安装处了问题,但后来发现并不是,因为用SQL Plus可以登录,只是用plsql登录时才出现这...

一个字符导致oracle安装出现ora-12154

前两天,在客户的虚拟机上安装oracle软件用于部署自己的应用。才装好不久,由于需要配置网络安全,把整个虚拟机都铲掉,克隆了个配置好网络安全的虚拟机给我们使用,只得重装oracle 10g。 当第二次...
  • Fredman
  • Fredman
  • 2010年04月17日 16:46
  • 3922

ORA-12154问题分析

想来很多同学都曾幸与ORA-12154结缘过吧?!遥想当年ORA-12154令人那样的无措憋屈无可奈何是那样的记忆犹新!! 恰逢今天有同学遇到ORA-12154了,就估且借此把分析处理过程小总结下吧...
  • blue225
  • blue225
  • 2012年11月19日 13:48
  • 1434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle ORA-12154: TNS:could not resolve service name错误的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)