【问题标题】:Ora 12154 errorOra 12154 错误
【发布时间】:2008-10-02 14:53:38
【问题描述】:

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

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

如果我用 Visual Studio 在我的电脑上运行该应用程序,它可以正常工作。

Oracle 安装在服务器“A”中,应用程序安装在服务器“B”中。服务器“A”在一个域中,服务器“B”在另一个域中。我的电脑在同一个域中,有服务器“A”。

在我的电脑中,我可以在 C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN 中找到文件 tnsname.ora,但在服务器“B”中我无法在任何地方找到它

有什么想法吗? 感谢您的帮助。

【问题讨论】:

  • 请编辑这篇文章的标题,不要更具描述性
  • 请发布有关编程的问题,而不是 Oracle 支持问题。

标签: database oracle ora-12541 ora-12154


【解决方案1】:

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

ORA-12154:TNS:无法解析指定的连接标识符
原因:使用连接标识符请求到数据库或其他服务的连接,并且指定的连接标识符无法使用配置的命名方法之一解析为连接描述符。例如,如果使用的连接标识符类型是网络服务名称,则无法在命名方法存储库中找到网络服务名称,或者无法定位或访问存储库。
行动: - 如果您使用本地命名(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 操作系统特定指南。

【讨论】:

    【解决方案2】:

    解决 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 地址。

    【讨论】:

      【解决方案3】:

      请勿在您设置的密码中输入@,或将其从密码中删除。 我也遇到了错误,更改后,错误得到解决。

      【讨论】:

        【解决方案4】:

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

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

        例如,我有一个系统变量:TNS_ADMIN - C:\oracle\ora92\network\ADMIN

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 是的,但是我要重新安装它,然后我要尝试每个答案
          【解决方案6】:

          看来您需要在“服务器 B”(应用程序服务器)上安装 Oracle 客户端,并将其配置为 TNSNAMES.ORA 文件。这是必需的,否则运行代码将不知道在哪里查找您在应用程序中使用的数据库(可能您在 web.config 中配置了数据源或硬编码的东西)。 请记住 - 如果没有 Oracle 客户端,您将无法(轻松)访问 Oracle。

          【讨论】:

            【解决方案7】:

            遇到了同样的问题。原来部署环境中的 TNSNAMES.ORA 具有不同的 ADDRESS_NAME 和 SID/SERVICE_NAME ,并且应用程序被配置为使用 SID - 这导致了问题。

            您的连接字符串必须包含 ADDRESS_NAME 而不是 SID

            【讨论】:

              【解决方案8】:

              可能的解决方案 -

              验证 TNSNAMES.ORA 存在且可访问。

              确保 TNSNAMES.ORA 中没有语法错误。

              验证连接字符串是否正确。

              验证是否存在任何 DNS 问题。

              如果问题是在使用 PL sql developer 客户端连接到服务器时。请尝试在 Program File 而不是 Program Files(x86) 中安装 SQL developer

              【讨论】:

                【解决方案9】:

                添加环境:

                Variable Name: TNS_ADMIN
                
                Variable Value: (YourDrive):\app\(UserName)\product\11.2.0\dbhome_1\NETWORK\ADMIN
                

                【讨论】:

                  【解决方案10】:

                  我也遇到过类似的问题。即使我在 tnsnames.ora 文件中添加了一个 tns 条目,下面的代码在我的系统中运行,但在另一台服务器中却没有运行。

                  con = new OracleConnection();
                  con.ConnectionString = "User Id=username;Password=password;Data Source=uit45";
                  con.Open(); // throws error here
                  

                  在挖掘和挖掘之后,我找到了解决方案。我们需要忽略 tns 文件中的条目,并且可以将 tns 条目作为连接字符串给予,这对我来说很好用。试试下面的代码。

                  con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=db-uit45.xxx)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=uit45)));User Id=username;Password=password");
                  con.Open();
                  

                  请注意,您需要提供相关值,尤其是HOST,PORT,SID,User IdPassword

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-08-09
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多