2011-10-31 80 views
12

我已切換到64位Windows 7並創建了一個簡單的Web應用程序來測試與數據庫的連接。我正在使用VS 2010 - 普通的asp.net web項目,我正在VS中運行應用程序。ORA-12154無法解析指定的連接標識

我收到此錯誤: 「ORA-12154無法解析指定的連接標識符」

我也有一個測試到數據庫的連接的示例控制檯應用程序,並能正常工作。

Google上搜尋它的一些之後,我發現很多帖子在網上refered權限,所以我把我的C:/ Oracle的權限讀取/寫入/執行我的ASP.net帳戶,網絡服務,計算機名稱。這仍然不能解決問題。我檢查了我的網絡應用程序在我的域\用戶名帳戶下運行,並且此帳戶有權讀/寫/執行到C:\ Oracle文件夾。

我甚至重新安裝我的VS,以確保它是在C:\ Program Files文件,而不是C:\ Program Files文件(x86)的

任何想法,爲什麼我的web應用程序不會看到連接串? (而控制檯應用程序) 不知道我還能做什麼。

回答

14

我打算假設您正在使用tnsnames.ora文件來指定您的可用數據庫服務。如果這樣的連接錯誤通常歸結爲兩件事情。

  1. 應用程序無法找到您在連接字符串中指定的TNS條目。

  2. 找到TNS條目,但IP或主機在tnsnames.ora文件中不正確。

擴大號碼1(我認爲是你的問題)。當您告訴Oracle使用類似連接時:

sqlplus user/[email protected] 

服務在tnsnames.ora文件中定義。如果我嘗試使用未在我的tnsnames.ora中定義的服務連接,我得到的錯誤你:

[sodonnel @家〜] $ sqlplus的sodonnel/sodonnel @無處

SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 31 21:42:15 2011 

Copyright (c) 1982, 2009, Oracle. All rights reserved. 

ERROR: 
ORA-12154: TNS:could not resolve the connect identifier specified 

所以你需要檢查的幾件事情:

  1. 是否有一個tnsnames.ora文件 - 我想是因爲你的控制檯可以連接
  2. 是否有服務在文件中的條目 - 我覺得還不錯的控制檯連接
  3. 應用程序可以找到tnsnames.ora嗎?

你的問題很可能是3號 - 做應用程序運行作爲不同的用戶,當您運行控制檯比?

Oracle查找在TNS_ADMIN環境變量定義的目錄中的tnsnames.ora文件 - 如果您運行的是不同的用戶,那麼也許TNS_ADMIN環境變量沒有設置,因此它無法找到該文件?

+2

請注意,它的tnsnames.ora不是tns_names.ora – cagcowboy

+0

@cagcowboy - 很對,我已經糾正它。當我輸入它時,它看起來不正確,但它沒有點擊我,它是錯誤的。 –

+0

斯蒂芬,謝謝。點1和2是肯定的。我最初的預感是我的網絡應用程序在不同的用戶下運行,而不是控制檯應用程序,所以我進行了檢查,當然,我的網絡應用程序運行爲域\用戶名,我給這個帳戶執行/寫入oracle文件夾的權限.... tnsnames.ora在那裏,所有條目都是正確的,但它仍然不能從Web應用程序中解析出來。 – sarsnake

4

可以有這麼多的問題,但如果你使用的是Oracle 10g中,卸載Oracle 10g中,也從註冊表中刪除的價值和安裝的Oracle 11g。但是,如果您使用的是Oracle 11g,那麼首先請檢查註冊表是否指向正確的主頁。有時可能會有多個家庭,因爲您一次又一次地安裝SQL開發人員。在這種情況下,您可以刪除不必要的主註冊表值,也可以將tns和sql.net文件添加到所有這些主頁,這可能會解決問題。我以這種方式解決了我的問題。

1

請讓我重複一下斯蒂芬說,因爲我錯過了第一次自己。該TNS_ADMIN環境變量和ORACLE_HOME設置爲文件是在那裏。在this link找到答案。

+0

對於不同的人,基於Oracle安裝(包括是否安裝了即時客戶端,我沒有),這將會有所不同。我的位置是:'ORACLE_HOME' ='C:\ oracle \ product \ 11'和'TNS_ADMIN' ='C:\ oracle \ product \ 11 \ network \ admin'。這些將是默認位置(儘管'11'可能是您當時正在安裝的任何版本)。 'Path'變量也必須包含'C:\ oracle \ product \ 11 \ bin'。 – vapcguy

0

的名稱使用過程監控和搜索沒有發現日誌tnsnames.ora文件。

檢查你的環境變量。如果無效,則卸載所有oracle客戶端並重新安裝。

+0

您不必卸載Oracle Client來更改環境變量,只需檢查它們並在必要時進行更新即可。右鍵單擊計算機,選擇屬性>高級系統設置,環境變量。其中一個需要是'TNS_ADMIN'並且指向'C:\ oracle \ product \ 11 \ network \ admin',在那裏需要一個帶有連接字符串的'tnsnames.ora'文件 - 這就是我的想法這篇文章試圖說。 – vapcguy

1

如果您正在使用LDAP,確保環境變量「TNS_ADMIN」的存在,幷包含文件「ldap.ora」指向的文件夾。

如果這個變量不存在,創建它,並重新啓動Visual Studio。

+0

或者確保環境(系統)變量指向一個你有'tnsnames.ora'''sqlnet.ora'文件夾 –

0

使用this link。對微軟支持

我給了允許IUSR_計算機用戶在Oracle主文件夾,我能解決這個問題

3

我有同樣的問題。在我的情況下,我使用的是使用AnyCPU設置構建的Web服務。由於WCF使用32位Oracle數據訪問組件,因此當我嘗試從控制檯客戶端調用它時,它引發了相同的錯誤。因此,當我使用基於x86的設置編譯WCF服務時,客戶端能夠成功從Web服務獲取數據。

如果您編譯爲「任何CPU」並在x64平臺上運行,那麼您將無法加載32位dll(在我們的例子中是Oracle數據訪問組件),因爲我們的應用程序不支持「 t開始於WOW64(Windows 64上的Windows32)。因此,爲了允許Oracle Data Access組件的32位依賴性,我編譯了x86平臺目標的Web服務,並且爲我解決了這個問題。

作爲替代方案,如果您在機器上安裝了64位ODAC驅動程序問題就消失了。

0

此錯誤(以及ORA-6413:未打開連接)也可以通過在應用程序可執行文件的路徑,並在10.2.0.1或低級Oracle客戶端庫中的錯誤引起的括號。

你應該升級你的Oracle客戶端庫或更改可執行文件的路徑。

進一步詳情,請參閱:

0

我在Visual Studio 2013有這個錯誤,用SSIS項目。我設置項目,性能,調試,Run64BitRuntime =假然後SSIS包跑了。但是,當我將軟件包部署到服務器時,我必須將該值設置爲true(服務器是64位Windows 2012/Sql 2014)。

我認爲這背後的原因是Visual Studio是一個32位應用程序。

1

有一個類似的問題,只有我的網絡應用程序很好,這是SQLPlus,給我連接問題,和ORA-12154 could not resolve the connect identifier specified錯誤。我安裝了11g和12個Oracle客戶端。我的環境變量都設置爲我的12實例指出:

  • ORACLE_HOME = C:\oracle\product\12
  • PATH = C:\oracle\product\12\bin;....
  • TNS_ADMIN = C:\oracle\product\12\network\admin

還有一個在HKLM\Software\Oracle\KEY_OraClient12Home1需要一個註冊表項,與環境變量具有相同路徑的字符串條目TNS_ADMIN

我在C:\oracle\product\11\network\adminC:\oracle\product\12\network\admin都有tnsnames.ora。據我所知,我的網絡應用程序和我使用的12個SQLPlus客戶端應該已經使用了所有12版本變量。

我的故障排除步驟:

  • 更改上述所有環境變量從1211
  • 連接11g的SQLPlus(加工!)
  • 將上述所有環境變量從11更改回12
  • 連接與12的的SQLPlus再次(工作!)

所以,我真的不知道是什麼原因導致12點的的SQLPlus停止連接,但這種復位可能有人上班,所以以爲我會記錄它這裏。

0

這是一個老問題,但Oracle的最新的安裝程序是沒有任何改善,所以我最近發現自己回到了這片沼澤地,四處顛簸了好幾天......

我的情況是SQL服務器2016 RTM。對於Visual Studio報表設計器和Integration Services設計器,32位Oracle 12c Open Client + ODAC最終能夠正常工作,並且還可以通過SQL Server代理(具有32位選項)運行SSIS包。在定義和測試數據源時,64位對於報告門戶的工作正常,但運行報告總是給出可怕的「ORA-12154」錯誤。

我最終的解決方案是切換到EZCONNECT連接字符串 - 這完全避免了TNSNAMES混亂。下面就來詳細介紹的鏈接,但它基本上只是:主機:端口/ SID

http://www.oracledistilled.com/oracle-database/oracle-net/using-easy-connect-ezconnect-naming-method-to-connect-to-oracle-databases/

在情況下,它可以幫助任何人在未來(或我停頓在此再次),這裏是我的Oracle安裝步驟(完整的恐怖):

安裝Oracle驅動程序:Oracle客戶端12c(32位)加上ODAC。

a。從http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.htmlhttp://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html下載並解壓縮以下文件):

i。 winnt_12102_client32.zip

ii。 ODAC112040Xcopy_32bit.zip

b。運行winnt_12102_client32 \ client32 \ setup.exe。對於安裝類型,選擇管理員。對於安裝位置,輸入C:\ Oracle \ Oracle12。接受其他默認值。

c。以管理員身份啓動命令提示符並將目錄(cd)更改爲ODAC112040Xcopy_32bit文件夾。 d)。輸入命令:install.bat all C:\ Oracle \ Oracle12 odac

e。將tnsnames.ora文件從另一臺機器複製到這些文件夾:*

i。 C:\ Oracle \ Oracle12 \ network \ admin *

ii。 C:\ ORACLE \ Oracle12 \產品\ 12.1.0 \ Client_1與\網絡\ ADMIN *

安裝Oracle客戶端12C(64)加ODAC

一個。從http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.htmlhttp://www.oracle.com/technetwork/database/windows/downloads/index-090165.html下載並解壓縮以下文件):

i。 winx64_12102_client.zip

ii。 ODAC121024Xcopy_x64.zip

b。運行winx64_12102_client \ client \ setup.exe。對於安裝類型,選擇管理員。對於安裝位置,輸入C:\ Oracle \ Oracle12_x64。接受其他默認值。

c。以管理員身份啓動命令提示符並將目錄(cd)更改爲C:\ Software \ Oracle Client \ ODAC121024Xcopy_x64文件夾。 d)。輸入命令:install.bat all C:\ Oracle \ Oracle12_x64 odac

e。將tnsnames.ora文件從另一臺機器複製到這些文件夾:*

i。 C:\ Oracle \ Oracle12_x64 \ network \ admin *

ii。 C:\ Oracle \ Oracle12_x64 \ product \ 12.1.0 \ client_1 \ network \ admin *

*如果使用EZCONNECT方法,則不需要這些步驟。

ODAC的安裝非常棘手和晦澀 - 感謝Dan英語給我的方法(詳見上文)。

相關問題