3

我目前正在尝试连接到 Oracle 数据库。我可以在我的开发机器上正常连接,但是当我部署到我的 Win2k3 sp2 服务器时,我收到以下错误。

无法打开连接... Oracle.DataAccess.Client.OracleException ORA-12541:TNS:在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode、OracleConnection conn、IntPtr opsErrCtx、OpoSqlValCtx* pOpoSqlValCtx、Object scr、String过程,布尔 bCheck)

任何想法、想法、指示都会有所帮助。我正在使用 Oracle.DataAccess.dll 版本 4.112.1.2。

谢谢

4

4 回答 4

3

实际问题是防火墙。

显然我的本地开发机器可以访问托管 Oracle 的服务器,但我的开发服务器没有。一旦两台服务器之间打开连接,TNS:no listener 错误就会消失。

这似乎是 Oracle 客户端返回的虚假错误消息。监听器在那里,我的配置(连接字符串)是有效的,但是两台机器之间没有可用的连接。

于 2010-11-01T18:37:21.877 回答
2

我有完全相同的问题。出于某种原因,使用“别名”似乎不起作用。

我的tnsnames.ora文件是这样的:

oracle =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = tcp)(HOST = myoracleserver.mydomain.com)(PORT = 1525))
    )
    (CONNECT_DATA =
      (SID = MYORACLESERVER)
    )
  )

然后我改变了我的连接字符串Data Source(使用别名):

User Id=scott;Password=tiger;Data Source=oracle

至(不使用别名):

User Id=scott;Password=tiger;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=myoracleserver.mydomain.com)(PORT=1525)))CONNECT_DATA = (SID = MYORACLESERVER)))

现在一切都与ODP.NET完美结合。当我使用旧的 ADODB 连接时,它曾经并且仍在使用别名。

更新:

ODP.NET 无法直接从您的应用程序中读取您的tnsnames.ora文件。您需要像我在回答中所说的那样进行调整,或者您也可以指定文件在您的or文件中的位置。 tnsnames.oraWeb.ConfigApp.Config

有关您拥有的所有选项的更多详细信息,请参阅我的其他答案

于 2015-08-24T19:12:25.150 回答
0

您的 TNSNames 条目指向的机器似乎没有运行侦听器。我可以看到三个不同的选项...(1)条目指向 tnsnames.ora 中的不同机器(两台机器上不同),(2)这两台机器之间的 DNS 解析不同,或者(3)监听器是如果机器上正在运行一个端口,则可能在不同的端口上进行侦听。

于 2010-10-28T04:47:15.363 回答
0

我也学到了另一件事。TNSNAMES.ora 文件,位于 Network\admin 文件夹中的 cannon 在实例的开头有空格。

例子:

MYORACLESERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = tcp)(HOST = myoracleserver.mydomain.com)(PORT = 1525))
    )
    (CONNECT_DATA =
      (SID = MYORACLESERVER)
    )
  )
于 2012-05-07T22:03:05.493 回答