Ora 12154错误

时间:2020-03-06 15:01:52  来源:igfitidea点击:

我最近在一个开发服务器中部署了一个Web应用程序。我正在使用oracle,asp.net和c#。当我在服务器上运行该应用程序时,一切正常,但是当我尝试在服务器外运行该应用程序时(例如,使用我的电脑),我得到此错误:

ORA-12154: TNS:could not resolve the connect identifier specified

如果我使用Visual Studio在PC上运行该应用程序,则效果很好。

Oracle安装在服务器" A"中,该应用程序位于服务器" B"中。服务器" A"在一个域中,服务器" B"在另一个域中。我的PC在同一域中具有服务器" A"。

在我的电脑中,我可以在C:\ oracle \ product \ 10.2.0 \ client_1 \ NETWORK \ ADMIN中找到文件tnsname.ora,但是在服务器" B"中我找不到它

任何的想法?
谢谢帮助。

解决方案

你有尝试过吗? (来自http://ora-12154.ora-code.com/)

ORA-12154:TNS:无法解析指定的连接标识符
原因:使用连接标识符请求到数据库或者其他服务的连接,并且使用配置的一种命名方法无法将指定的连接标识符解析为连接描述符。例如,如果使用的连接标识符的类型是网络服务名称,则在命名方法存储库中找不到网络服务名称,或者找不到或者访问该存储库。
行动:
如果我们使用本地命名(TNSNAMES.ORA文件):

  • 确保在Oracle Net概要文件(SQLNET.ORA)中将" TNSNAMES"列为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 Net Services管理员指南》或者《 Oracle操作系统特定指南》。

猜测:服务器B上未安装oracle客户端。

如果确实安装了oracle客户端,则仍可以将tnsnames文件放在任何位置(例如网络共享上的目录)。为此,请将TNS_ADMIN系统变量(XP上的"系统属性"->"高级"->"环境变量")设置到包含tnsnames文件的目录中。

例如,对于我来说,我有一个系统变量:TNS_ADMIN C:\ oracle \ ora92 \ network \ ADMIN

是否在服务器B上设置了ORACLE_HOME?

看来我们需要在"服务器B"(应用程序服务器)上安装Oracle Client,并配置它的TNSNAMES.ORA文件。这是必需的,因为否则,正在运行的代码将不知道在哪里可以找到我们在应用程序中使用的数据库(可能是在web.config中配置了数据源或者进行了硬编码)。
请记住,没有Oracle Client,我们将无法轻松访问Oracle。

解决TNS错误可能是真正的痛苦。需要牢记的几件事。

大多数开发环境(如Visual Studio)保留自己的TNS连接信息副本,并且不使用TNSNAMES.ora文件。保留此信息的文件不必称为TNSNAMES.ora,这只是默认名称。这可能是我们无法在服务器B上找到它的原因。

如果我们具有oracle客户端软件(或者oracle数据库),则可以使用tnsping来检查TNSNAMES.ora文件是否配置正确。

TNSNAMES.ora文件配置中最常见的问题是使用错误的服务名称和/或者错误的主机名。我们可能需要将" ODB_A"更改为" ODB_A.WORLD",反之亦然,具体取决于SQLNET设置。对于Oracle 10,后者是默认的SQLNET设置。对于后者,我们需要使用ping命令查看服务器" A",并知道是否需要使用" SERVERA"或者" SERVERA.DOMIN.COM"或者IP地址。