Oracle数据库连接之TNS-03505_无法解析服务名异常

        在进行数据库开发的时候,通常需要连接Oralce数据库,在进行连接时,经常性的会提示TNS-03505: Failed to resolve name(无法解析服务名),从而导致无法连接到数据库实例,那么通过本文对造成该问题的常见原因进行分析及如何解决。

        1.使用了不存在的服务名

        Oracle客户端配置文件tnsnames.ora中配置的数据库服务名为CREDITDB配置项中的SERVICE_NAME变量,在dos窗口输入,tnsping orcl检查服务是否可用,但在进行连接时则会提示TNS-03505,具体原因为需要连接的orcl服务在客户端配置文件中并不存在

CREDITDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = creditdb)
    )
  )

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


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )
Microsoft Windows [版本 10.0.19045.3324]
(c) Microsoft Corporation。保留所有权利。

C:\Users\xxxxxx>tnsping orcl

TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 10-9月 -2023 21:09:57

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

已使用的参数文件:
F:\app\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

TNS-03505: 无法解析名称

        tnsping命令:用于测试和查看数据库服务配置是否有效

        命令格式:tnsping  IP地址:端口号/数据库服务名 [count]

                            tnsping  网络服务名 [count]

        如果能够ping通,则说明客户端能解析listener的机器名,而且listener也已经启动,但是并不能说明数据库已经打开,而且tsnping的过程与真正客户端连接的过程也不一致。但是如果不能用tnsping通,则肯定连接不到数据库

    2.默认域名追加

         除第一种情况外,经检查PLSQL Developer 连接数据库与客户端配置文件中配置的服务名也一致,但还是无法连接数据库,同样提示TNS-03505的错误。

        1). 出现该场景时需检查oracle数据库sqlnet.ora网络配置文件,是否配置了NAMES.DEFAULT_DOMAIN变量是否定义了默认的域名。

        在连接数据库的时候,oracle会自动将默认的域名追加到网络服务名之后,网络服务名就会自动变为:域名:网络服务名

        解决办法:删除或注释sqlnet.ora配置文件中的NAMES.DEFAULT_DOMAIN变量

       2).如果不注释sqlnet.ora配置文件中的NAMES.DEFAULT_DOMAIN变量时,则需要将客户端配置文件tnsnames.ora中的服务追加sqlnet.ora中配置的域名,即配置方法如下:

sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN变量值.CREDITDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = creditdb)
    )
  )

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


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

        

你可能感兴趣的:(Oracle,数据库,oracle)