首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-12545:由于目标主机或对象不存在,连接失败- System.Data.OracleClient上没有错误

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

Stack Overflow用户
提问于 2013-08-15 12:28:43
回答 4查看 104.3K关注 0票数 8

不敢相信我不得不问这个问题,但我一辈子都无法连接到Oracle 11g数据库。

以下内容在使用System.Data.OracleClient时起作用--但显然这是贬值的。当使用完全相同的代码但使用Oracle.DataAccess.OracleClient时,我会得到以下错误

代码语言:javascript
复制
{"ORA-12545: Connect failed because target host or object does not exist"}

这是我的密码

代码语言:javascript
复制
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文件如下:

代码语言:javascript
复制
# 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 developer进行连接。只要我使用TNS连接类型,它就能工作,但如果我使用基本连接类型,则不起作用。

我还注意到在我的服务中有两个叫做

OracleOraDb11g_home1TNSListener OracleOraDb11g_home2TNSListener

我相信orac dbhome是home3,这会是问题吗?如果是的话,有没有人知道我会怎么修理它呢?

谢谢

UPDATE在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的东西,我可能在很久以前就安装了它,但是如果它引起了问题,我现在肯定不需要它了。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2013-08-15 12:34:05

编辑

我们试试别的吧。

ODP.NET可能不知道在哪里找到Oracle,因为它没有在路径环境变量中定义,或者没有在注册表中设置。

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

票数 2
EN

Stack Overflow用户

发布于 2014-08-25 13:08:37

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

票数 0
EN

Stack Overflow用户

发布于 2018-12-26 20:11:14

也有类似的问题:

Visual在tnsnames.ora中使用了错误的..\11.2.0\client_1\network\admin版本

TNS在tnsnames.ora中使用了正确的..\11.2.0\client_2\network\admin版本

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18252635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档