2010-10-27 117 views
3

我正在嘗試連接到Oracle數據庫。我可以在我的開發機器上正常連接,但是當我部署到我的Win2k3 SP2服務器時,出現以下錯誤。ODP .NET TNS:無監聽器

Faile打開連接... Oracle.DataAccess.Client.OracleException ORA-12541:TNS:在Oracle.DataAccess.Client.OracleException.HandleErrorHelper(的Int32 ERRCODE,康涅狄格州的OracleConnection,IntPtr的opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx沒有liestener,對象scr,字符串過程,布爾bCheck)

任何想法,想法,指令都會有幫助。我正在使用Oracle.DataAccess.dll版本4.112.1.2。

感謝

+0

不完全清楚你的配置在這裏。你在系統X上有一個Oracle數據庫。你的開發機器可以連接到X,但是你的新的W2K3服務器不能連接到X? – DCookie 2010-10-27 22:27:30

+0

你在配置上是正確的。我的問題是系統X和我的新W2K3服務器之間沒有開放的連接。 – jreddy 2010-11-01 18:38:33

回答

3

實際問題是防火牆。

顯然我的本地開發機器可以訪問託管Oracle的服務器,但是我的開發服務器沒有。一旦兩臺服務器之間存在開放連接,TNS:沒有偵聽器錯誤消失。

這似乎是由Oracle客戶端返回的假錯誤消息。監聽器在那裏,我的配置(連接字符串)是有效的,但兩臺機器之間沒有可用的連接。

+0

感謝您回來結束這個故事。 – 2012-07-09 16:58:24

0

這樣看來,你的TNSNAMES條目指向的機器沒有監聽器運行。 (1)該條目指向tnsnames.ora中的不同機器(在兩臺機器上不同),(2)這兩臺機器之間的DNS解析不同,或者(3)偵聽器是如果在機器上運行一個端口,可能會在另一個端口上偵聽。

0

我也學到了另一件事。 Network \ admin文件夾cannon中的TNSNAMES.ora文件在實例的開頭處具有空格。

例如:

MYORACLESERVER = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = tcp)(HOST = myoracleserver.mydomain.com)(PORT = 1525)) 
    ) 
    (CONNECT_DATA = 
     (SID = MYORACLESERVER) 
    ) 
) 
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連接時,它仍然在使用別名。

UPDATE:

ODP.NET不能從您的應用程序讀取您的tnsnames.ora文件直接。你需要像我在我的回答中說的那樣調整,或者你也可以指定你的tnsnames.ora文件在你的Web.ConfigApp.Config文件中。

有關您擁有的所有選項的更多詳細信息,請參閱my other answer

+0

如果在連接字符串中放入完全相同的TNS條目解決了您的問題,那意味着您沒有拿起您認爲是您的tnsnames.ora。搜索它的多個副本,並檢查環境中的TNS_ADMIN條目machine.config,web.config/app.config。 – 2015-08-24 20:39:32

+0

我在ADODB的Excel文件中有'Data Source = oracle':效果很好。我有一個ADO.NET控制檯應用程序,它使用我的答案中描述的方法。 Excel文件仍然有效。我很困惑,「我應該看什麼?」我剛剛在2臺不同的電腦上重新測試...結果相同。 – Maxime 2015-08-24 20:54:18

+0

在整個機器上搜索tnsnames.ora的多個副本。重命名除了你想測試的那個。還請檢查環境中的TNS_ADMIN條目machine.config,web.config/app.config。重點是,使用ODP.NET時可以找到幾種方法,並且與使用ADODB時不同。你可能會選擇一個不是你認爲正在使用的那個。 – 2015-08-25 13:49:04