Oracle 实例不会读取 tnsnames.ora



我正面临着一个问题,阻止我继续我所处的c#开发:我只是不能在c#应用程序上使用Oracle与我的Visual Studio Community 2019(它曾经与2015版本一起工作),尽管它在基于相同c#类的web应用程序的同一平台上工作得很好。

我必须准确地说,虽然我没有开发一年多,所以我担心我可能忘记了一件非常微不足道的事情,但是尽管我试图找出,但我没有看到我可能忘记了什么。

事实如下:

。我的开发机器叫XWAD8044

。该域有一台专用于Oracle的服务器机器,名为ORA025

。该服务器上的Oracle实例命名为ORA025(与服务器机器本身同名)

。我想访问一个名为CARL的模式,其密码为carpwd,创建于ORA025实例

上。。在XWAD8044机器上,有一个TNSNAMES。ORA文件包含以下实例:

ORA025 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ORA025)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORA025)
)
)

以下所有指令在XWAD044上运行良好:

ping ORA025 -> OK
tnsping ORA025 -> OK
sqlplus CARL/CARLPWD@ORA025 -> OK, SQLPLUS session starts on the CARL schema
select * from increments -> OK, all the lines of the CARL.INCREMENTS table are listed in the console.

所以这证明了XWAD044和ORA025之间的连接是完全可操作的。

然后使用下面的字符串打开连接:

User Id=CARL;Password=CARLPWD;Data Source=ORA025
在我的应用程序中,我引用了ORACLE.MANAGEDDATAACCESS.DLL(我只是把它从ORACLE.DATAACCESS.DLL我已经用了好几年了,但昨天还是失败了)

所以问题是,DLL似乎不想与TNSNAMES一起工作。ORA,因为当我尝试在CARL模式上打开连接时,我得到以下错误:

ORA-12504: TNS: listener was not given the Service_name in connect_data

在我看来,这条消息证明了Oracle DLL被c#进程很好地嵌入,否则我不会从Oracle实例中得到任何消息,但它似乎不使用TNSNAMES条目,因为在ORA025条目中给出了SERVICE_NAME。

谁能告诉我怎么解决这个问题?提前感谢。

我终于可以通过使用" EZconnect"方法,通过将服务器名称添加到实例名称(这里的两个名称相似),因此我替换了:

User Id=CARL;Password=CARLPWD;Data Source=ORA025

由:

User Id=CARL;Password=CARLPWD;Data Source=ORA025/ORA025

,这样,Oracle.ManagedDataAccess.Client最终能够找到我的Oracle服务器。

最新更新