我看到一些帖子说 Oracle 11g 客户端(适用于 Windows)适用于高达 9.2 的数据库。但是,如果客户端有时连接到 11g 有时连接到 10g 数据库,它还能工作吗?我的问题是:连接到 10g 和 11g 数据库时是否有什么不同的配置?
有些人告诉我 GAC 的政策。
谢谢 !
最佳答案
使用较新的客户端驱动程序连接到较旧的 Oracle 数据库通常没有问题,例如使用 12g 客户端连接到 10g 或 11g 数据库。其余的答案属于技术问题,在执行程序的计算机上(可能)已经安装了 Oracle 客户端的情况下,这些问题可能出现在 .Net 程序中。
2014 年更新:
与此同时,Oracle 已经为 Oracle 数据库发布了一个托管的 .Net 驱动程序。因此,与其安装本地 Oracle 客户端或随应用程序一起提供 Instant Client,不如只提供托管驱动程序,而不依赖于本地配置。这样您就可以轻松安装客户端、GAC、Oracle 数据库版本等。您可以从 the Oracle website 下载托管驱动程序。 .
以前的答案,如果您不能使用托管驱动程序,仍然需要:
如果您不知道您的客户端工作站上是否安装了 Oracle 客户端,问题就会开始。如果您在谈论 GAC 我假设,您不知道是否安装了 Oracle 客户端,如果安装了,它是哪个版本 .
如果您不想依赖已安装的 Oracle Client,您可以随 .Net 应用程序一起提供 Oracle Instant Client。例如您可以下载ODAC 11.2 Release 4 (11.2.0.3.0) with Oracle Developer Tools for Visual Studio ,它为您的开发人员工作站提供 Oracle 客户端安装(Visual Studio 支持 DataSet 开发和 EntityFramework)以及即时客户端所需的所有文件。
对于即时客户端,您需要以下文件(在 ODAC 安装的子文件夹中搜索它们):
此外,您的 Windows 目录中需要以下 .dll 文件:
只需复制应用程序工作目录中的所有文件(.exe 文件所在的位置)。
现在它如何属于 GAC?
如果客户端计算机上安装了 Oracle 客户端,则 GAC 中也会有一个 Oracle.DataAccess.dll。也有可能安装了一个策略,该策略声明如下:独立于您的程序所引用的 Oracle.DataAccess.dll,应始终使用您的 GAC 中的 Oracle.DataAccess.dll 版本。如果您安装我上面链接的 ODAC,您会在下面找到该文件
C:\Windows\Microsoft.NET\assembly\GAC_32\Policy.4.112.Oracle.DataAccess\v4.0_4.112.3.0__89b483f429c47342
结果是,如果客户端计算机有另一个版本的安装的 Oracle Client 11 比您在应用程序中引用的那一个安装的多。
为了解决这个问题,您可以配置您的 app.conf 以便忽略发布者策略并始终加载您的版本:
<configuration>
...
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
关于oracle11g - 连接到 10g 和 11g 数据库的 Oracle 11g 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364570/