【问题标题】:ORA 12154 - unable to connect from toad/SQLplusORA 12154 - 无法从 toad/SQLplus 连接
【发布时间】:2015-05-12 18:09:55
【问题描述】:

当我尝试连接我的 TNSNAMES.ora 文件中的任何数据库时,SQLPLUS 抛出

ORA-12154: TNS could not resolve service name

我已经检查过这些东西:

TNS_ADMIN environment variable is defined as "C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN"  

"C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\tnsnames.ora" was located  

The following connect descriptor was found for my_db in the tnsnames.ora file  

my_db=  
  (DESCRIPTION=  
    (ADDRESS=  
      (PROTOCOL=TCP)  
      (HOST=local.db)  
      (PORT=1521)  
    )  
    (CONNECT_DATA=  
      (SID=SCMPROD)  
    )  
  )  

"C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\sqlnet.ora" was located  

NAMES.DIRECTORY_PATH specifies TNSNAMES in the sqlnet.ora file  

问题是:

缺少什么?

更新

现在在 SqlPlus 上使用 the usr/pwd@SELFTEST 连接字符串可以正常工作

服务器上不可能有错误,因为在我的旧 PC 上,它仍然接受我的连接,而我公司的所有工作都在它上面工作。

tnsname.ora

SELFTEST=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=10.100.2.7)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=GOLDtest)
    )
  )

尝试从 Toad for Oracle 连接时问题仍然存在...

【问题讨论】:

  • 您究竟想如何连接?错误与文件不匹配 - 您显示的 TNS 条目有一个 SID,而错误指的是服务名称。那么你的连接字符串是什么,tnsnames.ora 中的匹配条目是什么?您尝试连接的数据库是否实际启动,并且您是否指定了正确的服务名称?该服务器上的lsnrctl status 显示什么?
  • @AlexPoole 它为此服务器响应TNS-01101: Could not find service name 10.100.2.7.1521。但在另一个,同样的问题,它给我TNS-01189: The listener could not authenticate the user
  • 检查该服务器上listener.ora 的内容,看起来你有一个错误。 (.1521 看起来很奇怪,但将点值作为服务名称也是如此)。您只向我们提供了部分信息,因此很难准确猜测您的配置出了什么问题。
  • 10.100.2.7.1521 只是一个粘贴错误...抱歉告诉我你想要的所有信息。
  • 您在 SQL*Plus 中使用的连接字符串;您认为实际上指的是tnsnames.ora 条目(或客户端计算机上的整个文件);来自服务器的listerner.ora 文件。全部添加为问题的编辑,而不是 cmets,因为它们不可读。 (如果您可以在服务器上本地连接到数据库,那么service_nameslocal_listener init 参数就不会受到伤害。

标签: oracle oracle10g


【解决方案1】:

ORA-12154:TNS 无法解析服务名称

my_db=  
  (DESCRIPTION=  
    (ADDRESS=  
      (PROTOCOL=TCP)  
      (HOST=local.db)  
      (PORT=1521)  
    )  
    (CONNECT_DATA=  
      (SID=SCMPROD)  
    )  
  )

错误是关于不正确的服务名称。我看到您的 tnsnames.ora 没有 service_name,而是您提到了 SID。可能这就是错误的原因。

您可以将 tnsnames.ora 编辑为:

SCMPROD =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = SCMPROD)
 )
)

假设,SCMPRODservice_name

【讨论】:

  • 如果它使用的是 TNS 别名,该错误是否会涉及 SID?我认为我们还没有看到相关的 TNS 条目。 (虽然我也觉得我需要咖啡……)
  • @AlexPoole 我正在考虑的是,OP 并没有向我们展示整个画面并告诉我们他对问题理解的版本。有了 tns 错误,到头来通常是一个愚蠢的问题。这一切都是为了正确地描述问题。 :-)
  • 是的,完全同意。我在这个问题上的 cmets 正试图找出更多。目前看起来像 listener.ora 问题,但仍然很难说。
【解决方案2】:

来自source

ORA-12154:TNS:无法解析指定的连接标识符
原因:使用连接标识符请求了到数据库或其他服务的连接,并且指定的连接标识符可以 不使用其中一种命名方式解析为连接描述符 配置的方法。例如,如果连接标识符的类型 used 是网络服务名称,那么网络服务名称不能是 在命名方法存储库中找到,或者该存储库无法 找到或到达。
操作

  • 如果您使用本地命名(TNSNAMES.ORA 文件):

  • 确保“TNSNAMES”列为 Oracle Net 配置文件 (SQLNET.ORA) 中 NAMES.DIRECTORY_PATH 参数的值之一

  • 验证 TNSNAMES.ORA 文件是否存在且位于正确的目录中且可访问。

  • 检查用作连接标识符的网络服务名称是否存在于 TNSNAMES.ORA 文件中。

  • 确保 TNSNAMES.ORA 文件中的任何位置都没有语法错误。查找不匹配的括号或杂散字符。中的错误 TNSNAMES.ORA 文件可能会使其无法使用。

  • 如果您使用目录命名:

  • 验证“LDAP”是否被列为 Oracle Net 配置文件 (SQLNET.ORA) 中 NAMES.DIRETORY_PATH 参数的值之一。

  • 验证 LDAP 目录服务器已启动且可访问。

  • 验证目录中是否配置了用作连接标识符的网络服务名称或数据库名称。

  • 通过指定完全限定的网络服务名称或完整的 LDAP DN 作为连接来验证使用的默认上下文是否正确 标识符

  • 如果您使用的是简易连接命名:

  • 验证“EZCONNECT”是否列为 Oracle Net 配置文件 (SQLNET.ORA) 中 NAMES.DIRETORY_PATH 参数的值之一。

  • 确保指定的主机、端口和服务名称正确。

  • 尝试将连接标识符括在引号中。请参阅 Oracle 网络服务管理员指南或 Oracle 操作系统 有关命名的更多信息的具体指南。

【讨论】:

  • 是的,错误是ORA-12154: TNS could not resolve service name
猜你喜欢
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
相关资源
最近更新 更多