在运行Java应用程序时,出现ORA-12154错误。 在Java应用程序中,我们必须使用数据库凭据登录。对于某些用户凭据,应用程序运行成功,而对于其他用户凭据,则抛出错误ORA-12154:TNS:无法解析指定的连接标识符。
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
最常见的原因是TNSNAMES.ORA
文件中没有包含数据库别名(您要连接到)。
如果您有几种Oracle软件产品,则每个产品都有很大的机会拥有自己的TNSNAMES.ORA
文件(通常位于其\network\admin
目录中)。它的方法是同时编辑所有这些文件(是 stupid ),或创建一个TNS_ADMIN
环境变量,该变量将指向包含“主” {{1} }文件,例如:
TNSNAMES.ORA
因此,每次必须添加新数据库时,我都要编辑该M:\>set tns_admin
TNS_ADMIN=C:\0_Oracle_library
文件,然后我所有的Oracle程序(Forms,Reports,SQL Developer,TOAD,SQL * Plus等)都将对其进行访问,使用它。
答案 1 :(得分:0)
Oracle error code documentation提供了一些有用的故障排除提示(以下是12.1):
ORA-12154:TNS:无法解析指定的连接标识符
原因:使用连接标识符请求到数据库或其他服务的连接,并且使用配置的一种命名方法无法将指定的连接标识符解析为连接描述符。例如,如果使用的连接标识符的类型是网络服务名称,则在命名方法存储库中找不到网络服务名称,或者找不到或访问该存储库。操作:
如果您使用本地命名(TNSNAMES.ORA文件):
-确保在Oracle Net概要文件(SQLNET.ORA)中将“ TNSNAMES”列为NAMES.DIRECTORY_PATH参数的值之一
-确认TNSNAMES.ORA文件存在并且在正确的目录中并且可以访问。
-检查TNSNAMES.ORA文件中是否存在用作连接标识符的网络服务名称。
-确保TNSNAMES.ORA文件中的任何地方都没有语法错误。查找不匹配的括号或流浪字符。 TNSNAMES.ORA文件中的错误可能会使它无法使用。如果使用目录命名:
-确认在Oracle Net概要文件(SQLNET.ORA)中,“ LDAP”被列为NAMES.DIRETORY_PATH参数的值之一。
-确认LDAP目录服务器已启动并且可访问。
-验证是否在目录中配置了用作连接标识符的网络服务名称或数据库名称。
-通过指定完全限定的网络服务名称或完整的LDAP DN作为连接标识符来验证所使用的默认上下文是否正确。如果您使用的是简单连接命名:
-验证“ EZCONNECT”是否已列为Oracle Net概要文件(SQLNET.ORA)中NAMES.DIRECTORY_PATH参数的值之一。
-确保指定的主机,端口和服务名称正确。
-尝试将连接标识符括在引号中。有关命名的更多信息,请参见《 Oracle Net Services管理员指南》或《 Oracle操作系统特定指南》。
首先检查您是否可以tnsping
指定的服务(tnsping
是Oracle Client中包含的实用程序)。例如,如果ORA-12154的连接为x/y@zzz
失败,则
tnsping zzz
这可能会给
TNS-03505: Failed to resolve name
,但还会显示上述本地sqlnet.ora
参数文件的路径。根据您的设置,同一位置应该还有其他.ora
个文件。
有多种方法可以配置此方法,具体取决于您的操作系统,Oracle客户端和名称解析设置。 (请注意,tnsnames.ora
文件不是唯一的命名方法。)如果您共享更多详细信息,则应该可以直接解决该问题。