2010-08-13 169 views
8

我試圖從ASP經典應用程序連接到一個oracle數據庫,但是我一直運行到ORA-12154錯誤。Oracle(0x80004005)ORA-12154:TNS:無法解析連接標識

  1. TNSNAMES.ORA配置正確

    DBSOURCE.ABcom = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP)(HOST = CDBcom)(PORT = 1231) ) ) (CONNECT_DATA = (SERVICE_NAME = DBSOURCE) ) )

  2. 我可以TNSPING

    C:\ Documents和Settings \ USERID.A>用tnsping DBSOURCE

    TNS Ping實用工具對32位Windows:版本10.2.0.4.0 - 生產上09-MAR-2 011 9點十二分31秒

    版權所有(c)1997,2007,Oracle。版權所有。

    使用參數文件: C:\ ORACLE \產品\ 10.2.0 \的Client_1 \ NETWORK \ ADMIN \ SQLNET.ORA

    用於TNSNAMES適配器來解析別名 試圖聯繫(DESCRIPTION =(ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP) (HOST = CDBcom)(PORT = 1231)))(CONNECT_DATA =(SERVIC E_NAME = DBSOURCE))) 行(30毫秒)

  3. 我可以創建一個ODBC連接和我已經測試了成功的連接。

  4. 我可以通過蟾蜍連接到oracle數據庫。
  5. 我檢查了我的sqlnet.ora文件

    NAMES.DEFAULT_DOMAIN = ABCOM

    SQLNET.AUTHENTICATION_SERVICES =(NONE)

    NAMES.DIRECTORY_PATH =(TNSNAMES,EZCONNECT)

  6. 我也檢查過TNSNAMES.ORA作爲我的系統路徑之一。

  7. 我可以用sqlplus

這裏連接到數據庫是引發錯誤

dim CnnStr 

Set Cnn = Server.CreateObject("ADODB.Connection") 

CnnStr="Provider=MSDAORA.1;Password=pass;User ID=user;Data Source=DBSOURCE" 

Cnn.Open CnnStr 

我運行Windows XP專業版32位SP3

我以前做的代碼在一個同事的機器上測試了這個,asp應用沒有問題,我在某處丟失了一個配置還是弄亂了我的配置?

感謝大家的幫助!

回答

4

似乎所有的設置都被檢查,但這裏是我的一些故障排除建議:

  • 如何在IIS下運行的帳戶限制?它是否具有讀取TNSNAMES的文件權限?你有沒有試圖給用戶更多的權利。甚至用本地系統帳戶運行IIS?記得把它恢復原樣。
  • 您確定沒有可能影響/阻止訪問的第三方應用程序這樣的防病毒或防火牆。 (禁用它們來測試,但不要忘了重新啓用:)

(那你最後如何解決呢?)

+0

非常感謝你!在我的組中包含了USERID \ USERS或者在TNSNAMES.ORA文件中的權限之後,它就起作用了! – ChickSentMeHighE 2011-03-15 16:32:11

+0

像一個魅力一樣工作。謝謝。在$ $$嚴重的痛苦。 – temarsden 2012-08-02 22:30:46

2

「這個工作在同事機器上,但不是我的 」。

ORA-12154通常是一個配置問題,在您的情況下它肯定會如此。簡短的答案是將您的機器與您的同事的機器進行比較,並找出其差異。

要做的檢查包括:

  • 的TNANAMES.ORA文件
  • sqlnet.ora文件
  • 的LISTENER.ORA文件(如果您使用的是本地數據庫)
+0

我雖然也從我的同事(其連接的作品複製TNSNAMES.ORA和SQLNET.ORA後什麼但是最初那)它仍然不能解決問題 – ChickSentMeHighE 2010-08-13 14:43:46

+0

奇怪的是他有能力通過tnsping ping數據庫。創建一個ODBC連接並從ODBC接口測試它可以正常工作。通過sqlplus連接也可以工作... – Mike 2010-08-13 17:14:17

+0

可能有一些服務需要重新啓動才能接收已更改的TNSNAMES.ORA或註冊表設置更改)。也許嘗試繞過TNSNAMES.ORA通過直接指定一個主機:端口:服務 – 2010-08-16 04:42:21

0

嘗試在計算機上將環境變量TNS_ADMIN的值設置爲/ network/admin(或者tnsnames.ora文件所在的任何位置),並查看是否有幫助。

+0

感謝您的回答,但它並沒有解決問題:( – ChickSentMeHighE 2010-08-13 14:25:28

1

如果您正在運行64位操作系統和Oracle 10,請嘗試安裝Oracle的所有修補程序。 發生了類似的事情,SQL plus和所有其他工作,除了我的.NET程序。 我在「Program files(x86)」文件夾中運行.Net程序。安裝補丁修復了它。

+0

可以請告訴我,我們需要安裝所有的補丁。如果你可以分享這個鏈接謝謝!! – SharpCoder 2014-04-08 13:14:25

2

你有多個Oracle家園嗎?檢查IIS是否指向另一個ORA_HOME(從而無法找到您的tnsnames.ora條目)。 我對IIS配置不是很熟悉,所以我會通過在我的PC上添加TNS條目來測試所有tnsnames.ora。

1

的可能的問題是在由Oracle目錄缺乏讀取權限用戶IIS正在運行。

正如@Derick所說,暫時在$ ORACLE_HOME目錄(Everyone =完全控制)上設置權限全開,重新啓動IIS並測試。當它工作時,給IIS用戶讀取該目錄的權限。

您也可以使用Process Monitor from Microsoft SysInternals確認此問題,並在CreateFile(...)API調用期間查看失敗消息以打開DLL或讀取TNSNAMES.ORA文件。考慮到在通過遊標進行選擇時臨時文件的工作方式,您可能還需要爲IIS用戶提供對某些目錄的寫入權限。

0

我有類似的問題,並找到了一個簡單的解決方案。您不必修改任何配置文件。希望這可以幫助你:

CREATE DATABASE LINK server2_db 
    CONNECT TO dbuser IDENTIFIED BY pwd USING 
'(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = server_2)(PORT = port_num)) 
    ) 
    (CONNECT_DATA = 
    (SERVICE_NAME = server2_db) 
    ) 
)'; 

解決的辦法是從這裏:http://oraclequirks.blogspot.com/2008/11/ora-12154-tnscould-not-resolve-service.html

相關問題