欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TNS-03505问题解决总结

程序员文章站 2022-07-15 16:11:35
...

最近部署项目,Linux系统使用非oracle用户测试(比如test)tnsping orcl出现如下提示信息:

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 04-DEC-2012 14:29:28

 

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

 

Used parameter files:

/opt/oracle/product/11g/network/admin/sqlnet.ora

 

TNS-03505: Failed to resolve name

乍一看,问题出现原因清楚明了。就是orcl服务名无法解析。但是我在本局域网使用其它windows系统中的pl/sql可以连接。

因为对Linux系统认知甚少,所以一头雾水。去网搜一下很多,大约有这么几种解决方案:

一是文件配置错误;

(http://blog.163.com/cl_oud999/blog/static/210724182201281332521593/)

二是sqlnet.ora文件中NAMES.DIRECTORY_PATH设置问题;

(http://hengdao.blog.51cto.com/2631450/683306)

三是lsnrctl status 监听错误或者sqlplus版本问题。

(http://blog.sina.com.cn/s/blog_60b1f55d01014sjr.html)

 

第一种情况意思就是说在tnsnames.ora这个文件中我配置的orcl有问题,大部人说前面不能有空格,我的本来就没有;再就是listener.ora有一个标准的写法,如下:

SID_LIST_LISTENER = 

  (SID_LIST = 

    (SID_DESC =

      (SID_NAME = PLSExtProc) 

      (ORACLE_HOME = /oracle/product/10.2.0/db_1) 

      (PROGRAM = extproc)

    ) 

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = /oracle/product/10.2.0/db_1) 

      (SID_NAME = orcl)

    ) 

  ) 

LISTENER = 

  (DESCRIPTION_LIST = 

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 

)

)

第二种情况说的是通过客户端访问数据库服务器顺序。我也是从这个帖子发现我的问题的,我的linux用户test没有访问tnsname.ora这个文件的权限。

第三种情况说的是监听服务没起来。这个很容易就能查别,使用lsnrctl status即可知道。

通过解决这么一个问题,我总结一下思路:

首先:查询监听状态。因为我的可以通过其它客户端访问,所以不会是监听的问题。

其次:使用oracle用户,测试tnsping orcl。一般情况下肯定通。非oracle用户并且不属于oracle用户所属组的查看是否有权限。没有权限使用: chmod o+r tnsname.ora即可。

最后:版本兼容性的问题。

 

相关标签: tns-03505