8

不敢相信我不得不问这个问题,但我终生无法连接到 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 连接类型,它就可以工作,但如果我使用 Basic 连接类型,它就不起作用。

我还注意到在我的服务中有 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

4 回答 4

2

编辑

让我们试试别的。

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

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

于 2013-08-15T12:34:05.390 回答
0

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

于 2014-08-25T13:08:37.237 回答
0

我不知道为什么,但开始HOST0.0.0.0我工作。tnsnames.oralistner.ora

当然,不得不跑lsnrctl start

于 2019-05-02T06:11:56.700 回答
0

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

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

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

于 2018-12-26T20:11:14.470 回答