多个Oracle实例会导致问题

时间:2014-09-05 07:16:34

标签: c# oracle .net-assembly gac odp.net

我一直在使用1个oracle客户端,一切都很好,但我不得不再安装2个不同版本的Oracle。现在它正在引发问题。

  1. Toad开始抛出异常弹出窗口,上面写着“模块oran11.dll中的地址访问冲突”。
  2. ASP.NET应用程序的OracleConnection开始抛出空的异常。
  3. 我通过重新排列系统环境变量中的路径值来解决1,将原始Oracle路径放在前面。但仍然在与2争吵,我调查了Process Explorer的dll加载。它看起来像加载错误的oracle dll,如11.2和12.1中的另一个。

    当然我可以通过卸载所有这些神谕来解决这个问题,并重新安装一个。但我必须将这3个用于不同的开发设置。

    如何修复这些oracle路径问题?有没有人有线索?

2 个答案:

答案 0 :(得分:2)

对于较旧的“非托管”提供程序,ODP.net由托管部分(oracle.dataaccess.dll)和非托管部分(几乎所有oracle主目录中的dll)组成。当oracle.dataaccess.dll被加载时,它会通过以下搜索顺序找到它需要的无法访问的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”配置变量并指向该asp.net站点的旧oracle主目录:

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

你可以尝试的另一件事是删除它 - 这样,它可以从gac加载一个“更好”的dll(即使你安装的版本更新,安装程序通常会安装发布者策略来重定向任何引用,至少对于相同的主要版本)。我这样说只是为了对如何避免将来的情况提供一些见解。我在这里有另一个答案: https://stackoverflow.com/a/15509914/852208

答案 1 :(得分:0)

这些程序集保存在GAC中。

转到C:\Windows\assembly,选择要删除的程序集,右键单击并选择Uninstall。这些程序集将不再被您的程序加载。

如果必须重新安装它们,它们仍然在Oracle文件夹中,因此您可以使用gacutil再次从那里安装它。