oracle - Oracle 客户端和 ODAC 的区别

标签 oracle odac

安装完整的 Oracle 客户端和安装 Oracle Odac 有什么区别?我需要在我的开发工作站上进行 .NET 开发,在将与另一台服务器上的 Oracle 数据库连接的 Web 应用程序服务器上需要哪些?

最佳答案

这很令人困惑,再次写下来对我有帮助。

我的总结:

  • Oracle Instant Client 仅公开直接 OCI(Oracle 调用接口(interface))API,因此仅与 Oracle 感知应用程序相关(例如,参见 http://www.oracle.com/technetwork/topics/winx64soft-089540.html)
  • ODAC 包括 Instant Client,此外还有一堆面向 Microsoft 的 API(.net 提供程序、ASP.Net 成员资格提供程序、OLEDB 驱动程序、ODBC 驱动程序、MTS 事务协调器),它们涵盖了您在大多数 Windows 中需要的内容应用场景。例如http://www.oracle.com/technetwork/topics/dotnet/downloads/install112021-200037.html . ODAC 有两种版本:'xcopy' 版本和 OUI(Oracle 通用安装程序)版本(和 只有 OUI 版本包括 SQL*Plus [#1])
  • ODT(Oracle Developer Tools for .Net)提供 Visual Studio 集成,通常与 ODAC 捆绑在一起(您可以下载名为 ODTwithODACxxxx.zip),例如 http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
  • Oracle.DataAccess nuget 包是 ODAC .net 驱动程序的一个版本,因此需要安装现有的 Instant Client(即使用 OCI)。令人困惑的是,有一次它被标记为托管驱动程序(因为它只是具有一些重要的非托管本地依赖项)。
  • Oracle.ManagedDataAccess nuget 包是一个完全托管的 .net 驱动程序,在“直接”模式下工作,不需要本地即时客户端

  • 因此,对于大多数 .net 用户来说,“Oracle 客户端”意味着安装了 OUI 的 ODAC Instant Client + .Net 驱动程序,也可能是 ODT。

    对于 nugets,值得指出的是,即使现在(2017 年 1 月)Oracle.ManagedDataAccess 驱动程序仍然不能做很多事情[#2],所以 Oracle.DataAccess + InstantClient 并不是一个完全过时的选项。如果你只是用 SELECT/INSERT 或 vanilla ADO.Net 读写,你会没事的。有人告诉我,EF 支持也比以前好得多。 DevArt 的 dotConnect 驱动程序是另一个(非常好的)选择。

    Oracle 即时客户端还有一个 nuget 包,但我不知道它的用途。大概是 Win32/.Net native OCI 应用程序,它们希望通过 nuget 实现零安装即时客户端。两个都。

    [#1] SQL*Plus 在运行时可能很少使用,尽管有一个 separate installer如果要将其添加到现有的 ODAC 安装,请在 Instant Client 下载页面上列出。

    [#2] 例如:使用表值 UDT 调用 oracle 存储过程

    关于oracle - Oracle 客户端和 ODAC 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29268299/

    相关文章:

    sql - DW 上下文中的 Grain 是什么

    oracle - 安装 Oracle ODAC 12c 第 4 版 (12.1.0.2.4) 时出现错误 PRVF-7536

    c# - 使用 Oracle.DataAccess (ODAC) 在 C# 中进行异步调用

    c# - ORA-00932 : inconsistent datatypes: expected DATE got NUMBER

    oracle - 在oracle查询中计算运行余额

    oracle - 将参数绑定(bind)到 Oracle 动态 SQL

    .net - 如何在ADO.NET实体数据模型中连接到Oracle

    sql - 如果测试 rownum 的值大于 100,则表 rownum 返回 0 条记录

    delphi - 为什么OraNet.dcu没有对应的.pas文件?

    在 bin\javaw.exe 中找不到 Java 运行时环境