ORA-12545:连接失败,因为目标主机或对象不存在 - System.Data.OracleClient上没有错误

时间:2013-08-15 12:28:44

标签: c# sql oracle

不敢相信我不得不问这个问题,但我不能为我的生活连接到Oracle 11g数据库。

以下在使用System.Data.OracleClient时有效 - 但显然这是折旧的。 使用完全相同的代码但使用Oracle.DataAccess.OracleClient时,我收到以下错误

{"ORA-12545: Connect failed because target host or object does not exist"}

这是我的代码

using (OracleConnection con = new OracleConnection("Data Source=orac;User Id=SYSTEM; Password=Pass;"))
        {
            con.Open();
            Console.WriteLine("Connection opened");

            OracleCommand cmd2 = new OracleCommand("SELECT * FROM SYSTEM.TABLE", con);
            OracleDataReader oracleDataReader = cmd2.ExecuteReader();

            while (oracleDataReader.Read())
            {
                Console.WriteLine(oracleDataReader[0]);
            }
        }

有人能帮我解决我做错的事吗?

我必须将程序更改为32位才能加载Oracle.DataAccess.dll

这甚至是正确的库使用???

由于

修改

tnsnames.ora文件如下:

# tnsnames.ora Network Configuration File: 
C:\app\UserName\product\11.2.0\dbhome_3\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

ORAC =
 (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = orac.example.com)
)
 )

LISTENER_ORAC =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))

更新

我尝试使用Oracle Sql开发人员进行连接。只要我使用TNS连接类型,这就行,但如果我使用基本连接类型则不起作用。

另外我注意到在我的服务中有2个名为

OracleOraDb11g_home1TNSListener OracleOraDb11g_home2TNSListener

orac dbhome是home3我相信,这可能是问题吗? 如果有的话,是否有人知道如何修复它?

由于

更新 在HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \中有两个属性(默认)和inst_loc。有几个文件夹,其中两个名为“KEY_OraDb11g_home1”和“KEY_OraDb11g_home2”,它们都包含一个名为ORACLE_HOME的属性:

KEY_OraDb11g_home1 - ORACLE_HOME = C:\ app \ UserName \ product \ 11.2.0 \ dbhome_2 KEY_OraDb11g_home2 - ORACLE_HOME = C:\ app \ UserName \ product \ 11.2.0 \ dbhome_3

home1中Db的SID叫做OracleDev,我可能早就安装了这个,但是如果它导致问题我现在肯定不需要它

由于

4 个答案:

答案 0 :(得分:2)

修改

我们试试别的。

ODP.NET可能不知道在哪里找到您的Oracle Home,因为它未在 PATH环境变量中定义,或者未在注册表中设置。

检查您的PATH并确保它包含您的Oracle主目录和“Oracle Home \ bin”。对于注册表,请查找HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\。其中应该有一个名为HOME0的密钥,其字符串值为ORACLE_HOME。确保它指向您的Oracle Home。

答案 1 :(得分:0)

检查主机文件,在C:\ windows \ system32 \ drivers \ etc下,特别是如果计算机是VM并且本地主机的IP地址可能会更改,如果VM的IP地址不是静态的话。如有必要,更改该文件上的本地主机的IP

答案 2 :(得分:0)

有类似的问题:
Visual Studio在.. \ 11.2.0 \ client_1 \ network \ admin
中使用了错误的tnsnames.ora版本 TNS Ping在.. \ 11.2.0 \ client_2 \ network \ admin

中使用了tnsnames.ora的正确版本

因此,tnsping成功,但是Visual Studio返回:ORA-12545:连接失败,因为目标主机或对象不存在。

解决方案(可能不是最好的)将tnsnames.ora的正确版本复制到.. \ 11.2.0 \ client_1 \ network \ admin

答案 3 :(得分:0)

我不知道为什么,但是在HOST0.0.0.0中将tnsnames.ora设置为listner.ora对我有用。

当然,必须运行lsnrctl start