尝试使用 ODP .NET 连接时出现 ORA-12154 错误
ORA-12154 error trying to connect using ODP .NET
尝试使用 ODP .NET 连接时出现 ORA-12154 错误
更新:Wernfried 的回答为我修复了它。
Create an environment variable
TNS_ADMIN=D:\oracle\product.1.0\dbhome_1\network\admin
Sqlplus reads TNS_ADMIN from Registry but ODP.NET Managed Driver does
not read the registry. See also:
您可以检查环境变量是否设置为:
string tns_admin = Environment.GetEnvironmentVariable("TNS_ADMIN")
我不太理解他建议的 link 是如何相关的。
原题:
尝试使用 ODP .NET 连接时出现 ORA-12154 错误
代码:
OracleConnection oracleConnection = new OracleConnection();
string connectionString = "User Id=redacted;Password=redacted;Data Source=db6";
oracleConnection.ConnectionString = connectionString;
oracleConnection.Open();
错误:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified ---> OracleInternal.Network.NetworkException: ORA-12154: TNS:could not resolve the connect identifier specified
at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName)
at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor)
at OracleInternal.Network.OracleCommunication.Connect(String
我的tnsnames.ora:
# tnsnames.ora Network Configuration File: D:\oracle\product.1.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
DB6 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db6)
)
)
LISTENER_DB6 =
(ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
连接 sql-plus:
C:\Users\Derek.Morin\Documents\Visual Studio 2010\Projects\ScriptCode\Oracle>sqlplus redacted/redacted@localhost/db6
SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 10 09:10:14 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Last Successful login time: Tue Sep 22 2015 09:41:19 -05:00
Connected to:
Oracle Database 12c Release 12.1.0.1.0 - 64bit Production
Wernfried 的评论帮我解决了这个问题。因为他没有回来 post 它作为答案 - 我将用他的评论结束这个。
创建环境变量
TNS_ADMIN=D:\oracle\product.1.0\dbhome_1\network\admin
sqlplus 从注册表中读取 TNS_ADMIN,但 ODP.NET 托管驱动程序不读取注册表。另请参阅 Whosebug。com/questions/28280883/… – Wernfried Domscheit 2015 年 12 月 10 日在 16:24
注意:我在使用 ODP.Net 的 SSRS 项目中遇到了这个问题,在我的例子中,ODP.Net 将我的 TNS 默认为 "C:\Program Files (x86)\Oracle Developer Tools for VS2015\network\admin"(尽管事实上我有一个 TNS_ADMIN 用于其他用途的环境变量。我进入该目录并将示例 tnsnames.ora 和 sqlnet.ora 文件重命名为不同的东西(即垃圾-tnsnames.ora)它开始工作。疯了!希望这对其他人有帮助。
我支持 Jeff 的观察。几天来我一直在努力解决这个问题,这是关键。我在有问题的服务器上搜索了所有现存的 tnsnames.ora
文件,重命名了所有不在 %ORACLE_HOME/network/admin
中的文件,然后一切都开始工作了!
我最近卸载了 32 位 Oracle 驱动程序并重新安装了 64 位驱动程序...在短时间内,唯一的 tnsnames.ora
文件是示例文件(在示例子目录中)...也许坏的 link (必须在注册表中,我一直都有那个 TNS_ADMIN
环境变量)是在那个时候伪造的?不确定,但即使变量似乎对某些人有所帮助,但在这个问题上水可能会非常浑浊。
尝试使用 ODP .NET 连接时出现 ORA-12154 错误
更新:Wernfried 的回答为我修复了它。
Create an environment variable TNS_ADMIN=D:\oracle\product.1.0\dbhome_1\network\admin
Sqlplus reads TNS_ADMIN from Registry but ODP.NET Managed Driver does not read the registry. See also:
您可以检查环境变量是否设置为:
string tns_admin = Environment.GetEnvironmentVariable("TNS_ADMIN")
我不太理解他建议的 link 是如何相关的。
原题:
尝试使用 ODP .NET 连接时出现 ORA-12154 错误
代码:
OracleConnection oracleConnection = new OracleConnection();
string connectionString = "User Id=redacted;Password=redacted;Data Source=db6";
oracleConnection.ConnectionString = connectionString;
oracleConnection.Open();
错误:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified ---> OracleInternal.Network.NetworkException: ORA-12154: TNS:could not resolve the connect identifier specified
at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName)
at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor)
at OracleInternal.Network.OracleCommunication.Connect(String
我的tnsnames.ora:
# tnsnames.ora Network Configuration File: D:\oracle\product.1.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
DB6 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db6)
)
)
LISTENER_DB6 =
(ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
连接 sql-plus:
C:\Users\Derek.Morin\Documents\Visual Studio 2010\Projects\ScriptCode\Oracle>sqlplus redacted/redacted@localhost/db6
SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 10 09:10:14 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Last Successful login time: Tue Sep 22 2015 09:41:19 -05:00
Connected to:
Oracle Database 12c Release 12.1.0.1.0 - 64bit Production
Wernfried 的评论帮我解决了这个问题。因为他没有回来 post 它作为答案 - 我将用他的评论结束这个。
创建环境变量
TNS_ADMIN=D:\oracle\product.1.0\dbhome_1\network\admin
sqlplus 从注册表中读取 TNS_ADMIN,但 ODP.NET 托管驱动程序不读取注册表。另请参阅 Whosebug。com/questions/28280883/… – Wernfried Domscheit 2015 年 12 月 10 日在 16:24
注意:我在使用 ODP.Net 的 SSRS 项目中遇到了这个问题,在我的例子中,ODP.Net 将我的 TNS 默认为 "C:\Program Files (x86)\Oracle Developer Tools for VS2015\network\admin"(尽管事实上我有一个 TNS_ADMIN 用于其他用途的环境变量。我进入该目录并将示例 tnsnames.ora 和 sqlnet.ora 文件重命名为不同的东西(即垃圾-tnsnames.ora)它开始工作。疯了!希望这对其他人有帮助。
我支持 Jeff 的观察。几天来我一直在努力解决这个问题,这是关键。我在有问题的服务器上搜索了所有现存的 tnsnames.ora
文件,重命名了所有不在 %ORACLE_HOME/network/admin
中的文件,然后一切都开始工作了!
我最近卸载了 32 位 Oracle 驱动程序并重新安装了 64 位驱动程序...在短时间内,唯一的 tnsnames.ora
文件是示例文件(在示例子目录中)...也许坏的 link (必须在注册表中,我一直都有那个 TNS_ADMIN
环境变量)是在那个时候伪造的?不确定,但即使变量似乎对某些人有所帮助,但在这个问题上水可能会非常浑浊。