3

很抱歉这个问题很幼稚,但我对这个主题的经验也是如此。

通过谷歌搜索我的理解,我只想确认理解是正确的。欢迎大家指出我错的地方。

  1. OCI 基本上是一组 API,C/C++ 程序员可以使用这些 API 编写 C/C++ 应用程序来访问 Oracle 数据库。

  2. a) Oracle 即时客户端 SDK 是使用 OCI (???) 的(DLL/共享库)。C/C++ 程序员编写的 C/C++ 代码链接到 Oracle 即时客户端库,因此也使用 OCI。b)即时客户端的好处是它减轻了程序员编写一些复杂代码的痛苦(??)。c) 即使 C/C++ 程序员不使用 Instant Client 库,他们仍然可以使用 OCI 并完成工作(这是正确的吗??)

    d) 这是真的吗?C/C++ 程序员只需要 OCI 库来编写一个连接到远程 Oracle 数据库并进行表操作的应用程序吗?我们
    还需要任何 ODBC 驱动程序吗?如果是,为什么?oci.lib 还不够吗?

  3. FULL Oracle Client 和 Instant Oracle Client 有什么区别?Instant Oracle 客户端是否真的只是 FULL Oracle 客户端的一个子集?

  4. 我无法获得 Instant Client 与各种 Oracle 数据库的互操作性矩阵。在 Oracle 网站上搜索了很多。我唯一能找到的是我无法访问的 Oracle 支持站点的链接。

请澄清我的疑问。提前谢谢了。

4

2 回答 2

3

简要地:

  • OCI 是 C API 库。还有一个名为 OCCI 的 C++ 库,但我不推荐它(您可能会遇到各种编译器上的 C++ ABI 更改/方言的问题)

  • Instant 和“厚”Oracle 客户端都包含 OCI 库(OCI.DLLlinclntsh.so)。Instant 客户端提供的服务或多或少是独立的。ei 它不依赖于 Oracle 客户端提供的其他库(比较lddLinux 或depwalkWindows 上的输出)。

  • 两者还包含必要的标题

  • 两个客户端中的 C API 实际上是相同的。我记得的唯一例外是一组受支持的数据库本机字符集。InstantClient 仅支持UTF8,ISO Latin1ASCII.

  • “thick”客户端还包含一个名为“libxml.a”的库,当您想使用 datatype 时需要它SYS.XMLTYPE。该库未(出于某种未知原因)与 InstantClient 捆绑在一起

  • “厚”客户端还包含一些方便的诊断工具,例如tnsping

  • InstantClient 非常容易“设置”。用户只需解压缩单个 .zip 文件。不必设置ORACLE_HOME PATH LD_LIBRARY_PATH环境。变量。您只需dlopen()一个库文件即可。

  • InstanctClient 可以在没有tnsnames.ora(尽管它支持)的情况下工作,而不是您可以使用类似 jdbcEZCONNECT

  • 除非您是 Oracle 业务合作伙伴,否则这两种类型的客户都不得重新分配。因此,您不能将这些驱动程序库嵌入到您的应用程序中。然后每个用户必须单独下载。

  • 到目前为止,我还没有找到如何区分 InstantClient OCI.DLL 库的 C API 方法。

  • Oracle Call Interface Programmer's Guide中有 InstantClient 特定部分

  • ORACLE_HOME我记得设置env时 InstantClient 可能存在一些问题。变量和它的值以斜线结尾(?或不结束?)'/'

于 2014-01-10T16:18:20.693 回答
0

Oracle 即时客户端是完整/“厚”客户端的一小部分。它包括 OCI C 库、JDBC 和 ODBC,这使得用 C、Perl、Python、Java、Scala 等编写的程序可以连接到 Oracle 数据库服务器。即时客户端不包括熟悉的 Oracle 工具,如 sqlplus、sqlldr、exp、imp 等。但是,可以单独安装 sqlplus 以与即时客户端一起使用,而无需完整的客户端。

于 2016-01-12T22:43:39.807 回答