【问题标题】:OCI & Instant Client SDK & Oracle DatabaseOCI & Instant Client SDK & Oracle 数据库
【发布时间】:2013-10-28 08:31:44
【问题描述】:
很抱歉这个问题太天真了,但我对这个主题的经验也是如此。
通过谷歌搜索我的理解,我只想确认理解是正确的。欢迎大家指出我错的地方。
OCI 基本上是一组 API,C/C++ 程序员可以使用这些 API 编写 C/C++
应用程序访问 Oracle 数据库。
-
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 还不够吗?
FULL Oracle Client 和 Instant Oracle Client 有什么区别?是不是真的
Instant Oracle 客户端只是 FULL Oracle 客户端的一个子集?
我无法获得 Instant Client 的互操作性矩阵
甲骨文数据库。在 Oracle 网站上搜索了很多。我唯一能找到的是链接
到我无法访问的 Oracle 支持站点。
请澄清我的疑问。非常感谢。
【问题讨论】:
标签:
oracle
oracle-call-interface
instantclient
【解决方案1】:
简单地说:
OCI 是 C API 库。还有一个叫做 OCCI 的 C++ 库,但我不推荐它(你可能会遇到各种编译器上 C++ ABI 更改/方言的问题)
Instant 和“厚”Oracle 客户端都包含 OCI 库(OCI.DLL 或 linclntsh.so)。 Instant 客户端提供的服务或多或少是独立的。即它不依赖于 Oracle 客户端提供的其他库(比较 Linux 上 ldd 或 Windows 上 depwalk 的输出)。
两者都包含必要的标题
两个客户端中的 C API 实际上是相同的。我记得的唯一例外是一组受支持的数据库本机字符集。 InstantClient 仅支持UTF8、ISO Latin1 和ASCII。
“thick”客户端还包含一个名为“libxml.a”的库,当您想使用数据类型SYS.XMLTYPE 时需要该库。此库未(出于某种未知原因)与 InstantClient 捆绑
“厚”客户端还包含一些方便的诊断工具,例如tnsping
InstantClient 非常容易“设置”。用户只需解压缩单个 .zip 文件。不必设置 ORACLE_HOME PATH LD_LIBRARY_PATH env。变量。您只需dlopen() 一个库文件即可。
InstanctClient 可以在没有tnsnames.ora 的情况下工作(尽管它支持它)而不是你可以使用类似 jdbc 的EZCONNECT
除非您是 Oracle 业务合作伙伴,否则这两种类型的客户端都不得重新分发。因此,您不能将这些驱动程序库嵌入到您的应用程序中。然后每个用户必须单独下载。
目前我还没有找到一个 C API 方法如何区分 InstantClient OCI.DLL 库。
Oracle 调用接口程序员指南中有 InstantClient 特定部分
我记得在设置 ORACLE_HOME 环境时 InstantClient 可能存在一些问题。变量和它的值以斜线结尾(?或不结尾?)'/'
【解决方案2】:
Oracle 即时客户端是完整/“厚”客户端的一小部分。它包括 OCI C 库、JDBC 和 ODBC,这使得用 C、Perl、Python、Java、Scala 等编写的程序可以连接到 Oracle 数据库服务器。即时客户端不包括熟悉的 Oracle 工具,如 sqlplus、sqlldr、exp、imp 等。但是,可以单独安装 sqlplus 以与即时客户端一起使用,而无需完整的客户端。