2014-09-05 74 views
1

我一直在使用1個oracle客戶端,一切都很好,但我必須安裝2個不同版本的Oracle。現在它造成了問題。多個Oracle實例導致問題

  1. Toad開始拋出異常彈出窗口,其中顯示「在模塊oran11.dll中的地址訪問衝突」。
  2. OracleConnection的ASP.NET應用程序開始拋出空的異常。

我通過重新排列系統環境變量中的路徑值解決了問題,將原始Oracle路徑放在其他位置之前。但仍然掙扎與2,我看着進程的資源管理器的DLL加載。它看起來像從11.2加載錯誤的oracle dll,另一個從12.1加載。

當然,我可以嘗試通過卸載所有這些神諭來解決這個問題,並重新安裝一個。但我必須保留這3個不同的開發環境。

我該如何解決這些oracle路徑問題?有沒有人有線索?

回答

2

對於較舊的「非託管」提供程序,ODP.net由受管部分(oracle.dataaccess.dll)和非託管部分(oracle主目錄中的幾乎所有其他dll)組成。當oracle.dataaccess.dll加載了它會突破下面的搜索以找到它所需要的unmananged dll文件:

的Oracle.DataAccess.dll搜索基於依賴託管DLL(例如 如Oracle客戶端)以下順序:

Directory of the application or executable. 

DllPath setting specified by application config or web.config. 

DllPath setting specified by machine.config. 

DllPath setting specified by the Windows Registry. 

HKEY_LOCAL_ MACHINE\Software\Oracle\ODP.NET\version\DllPath 

Directories specified by the Windows PATH environment variable. 

http://docs.oracle.com/html/E10927_01/InstallODP.htm

我的第一個猜測是,你有你的bin目錄中的舊版本oracle.dataaccess.dll的。你最簡單的解決方法是指定一個「DllPath的」配置變量和指向舊的Oracle主爲asp.net網站:

<configuration> 
<oracle.dataaccess.client> 
    <add key="DllPath" value="C:\app\user\product\11.1.0\your_old_client\bin"/> 
    ... 

另一件事你可以嘗試在刪除它 - 這樣,它可能加載「更好「的dll(即使您安裝的版本較新,安裝程序通常會安裝發佈者策略以重定向任何引用,至少對於相同的主要版本)。我只是想說一些關於如何避免未來局勢的見解。我在這裏有另一個關於這個問題的答案: https://stackoverflow.com/a/15509914/852208

+0

謝謝!!!這並沒有解決我的問題問題,但很好的線索瞭解更多。我發現machine.config設置爲新版本,所以試圖改變它,它改變了一點症狀,但無法解決我原來的問題。所以決定卸載所有,然後重新安裝我現在需要的一個。 – user3110409 2014-09-12 05:57:34

0

這些程序集保存在GAC中。

轉到C:\Windows\assembly,選擇要刪除的組件,單擊右鍵並選擇Uninstall。那些程序集將不會再被加載。

如果你不得不重新安裝它們,它們仍然在Oracle文件夾中,所以你可以使用gacutil從那裏再次安裝它。

+0

感謝但這些DLL(oraons.dll,oraops12.dll等)正在從他們安裝的路徑通過QTAgent32.exe加載。這就是爲什麼我認爲這是一個與路徑有關的問題。他們不在c:\ windows \ assembly \ – user3110409 2014-09-05 07:25:08

+0

您的TOAD問題已解決,對吧?這只是關於第二個問題,對吧?另外,TOAD不使用.NET。 – 2014-09-05 07:26:34

+0

是的,蟾蜍問題解決了。只有第二個人在困擾我:( – user3110409 2014-09-05 07:28:10