在服务器上安装ODP.net以解决Oracle.DataAccess.Client.OracleException:提供程序与Oracle客户端版本不兼容

时间:2011-11-29 16:15:01

标签: .net oracle11g oracleclient

我有一个测试环境,用于我的网站将使用的服务和生产环境。在我的测试环境中,我在服务器上安装了ODP.net。到目前为止,使用Oracle的服务似乎运行得非常流畅。我似乎根本没有在该服务器上运行Oracle客户端。另一方面,我有一个服务器上有一个Oracle客户端,但似乎没有安装ODP.net(我正在进行双重检查,但这就是SO的情况)题)。在生产服务器上,我得到了这个例外:

Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

在两个服务器中我在bin和lib文件夹中都有Oracle.DataAccess dll(不要认为我在lib文件夹中需要它,但为什么要摇摇欲坠...我相信你能想出来一个很好的理由,但现在不是!!!)。我的问题是我需要将ODP.net安装到生产服务器上吗?这是否解决了您遇到的任何问题?我看到一些SO帖子说这解决了他们的类似问题。你能推荐一个行动方案吗?谢谢!

5 个答案:

答案 0 :(得分:12)

oracle客户端有很多小子版本,可能发生的事情是安装在机器上的oracle客户端发出的错误与Oracle.DataAccess.dll文件的版本完全相同从

最好的办法是确保在每台开发机器和服务器上使用完全相同的安装包。这样可以避免任何不匹配。

作为替代方案,我过去为解决这个问题所做的事情(可能不是最好的"要做的事情,但它通常对我有用)是将文件OraOps11.dll\bin文件一起复制到Oracle.DataAccess.dll目录。

在同一台机器上获取同一oracle安装文件Oracle.DataAccess.dll。它应该位于这样的文件夹中,具体取决于您安装Oracle的位置以及版本:

  

C:\ ORACLE \产品\ 11.1.0 \的Client_1 \ BIN \ OraOps11.dll

答案 1 :(得分:5)

一旦我跑了它,这对我有用:

OraProvCfg /action:config /product:odp /frameworkversion:v2.0.50727 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

OraProvCfg /action:config /product:odp /frameworkversion:v4.0.30319 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\4\Oracle.DataAccess.dll
祝你好运

答案 2 :(得分:2)

我遇到了完全相同的问题,我试图尽可能多地复制dll,但没有运气。

最后,我必须在服务器(Win 2008 R2 64bit)中安装" ODTwithODAC121012"(32位)。

安装后请确保:

  • 使用Oracle dll位置更新PATH:\ product \ 12.1.0 \ client_1 \ bin和\ product \ 12.1.0 \ client_1
  • 重新启动服务器。
  • 为IIS中的应用池启用32位。

答案 3 :(得分:1)

我在安装了Oracle 10.2.0.3(与64位兼容的oracle 10.2版本)的Windows 2012 Server中运行同样的问题,并部署了一个使用10.2.0.1 Oracle客户端的网站。

我在这篇文章中尝试了所有解决方案,但是那个起作用的解决方案是阿卜杜拉回答的最后一点:

"为IIS中的应用池启用32位"

当然,我还必须使用正确的Oracle.Data.Access参考(10.2.0.3)部署我的webapp

最后,错误信息令我困惑,因为它驱使我不知道解决版本问题,但真正的问题是IIS无法执行32位应用程序。

希望有所帮助

答案 4 :(得分:0)

谢谢......这有助于我节省了将frm 32位转换为64位ASP.Net应用程序的时间......

详情: APP服务器寻找客户端库,甚至我们使用远程处理组件连接到ORACLE db ...与ORACLE客户端64位...

在将这5个dll复制到我的app / bin文件夹

后,我得到的执行得到了解决
  1. OCI.DLL
  2. oraociicu11.dll
  3. oraops11w.dll
  4. orannzsbb11.dll
  5. OCIW32.DLL
  6.   

    错误讯息:      “Oracle.DataAccess.Types.OracleString”的类型初始值设定项引发了异常。

         

    错误详细信息:   System.TypeInitializationException:'Oracle.DataAccess.Types.OracleString'的类型初始值设定项引发了异常。 ---> Oracle.DataAccess.Client.OracleException提供程序与Oracle.DataAccess.Client.OracleInit.Initialize()上的Oracle客户端版本不兼容      ---内部异常堆栈跟踪结束---

         

    服务器堆栈跟踪:      在System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType类型)      在System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject(ParseRecord pr)      在System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseMember(ParseRecord pr)      在System.Runtime.Serialization.Formatters.Binary ._ BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)      在System.Runtime.Serialization.Formatters.Binary。 _BinaryParser.Run()      在System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler,__BinaryParser serParser,Boolean fCheck,Boolean isCrossAppDomain,IMethodCallMessage methodCallMessage)      在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream,HeaderHandler handler,Boolean fCheck,Boolean isCrossAppDomain,IMethodCallMessage methodCallMessage)      在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream,HeaderHandler handler,Boolean fCheck,IMethodCallMessage methodCallMessage)      在System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

         

    在[0]处重新抛出异常:      在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)      在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type)