很抱歉这个问题非常幼稚但我对这个主题的体验也是如此。
从谷歌搜索,我只是想确认理解是正确的。欢迎大家指出我错了。
OCI基本上是一组API,C / C ++程序员可以用来编写C / C ++ 应用程序访问Oracle数据库。
a)Oracle即时客户端SDK是一个(DLL /共享库),它使用OCI(???)。 C / C ++ 由C / C ++程序员编写的代码链接到Oracle即时客户端库和 因此也使用OCI。 b)即时客户端的好处是它减轻了程序员写一些的痛苦 复杂的代码(??)。 c)即使C / C ++程序员不使用Instant Client库,他们仍然可以使用OCI &安培;完成工作(这是正确的??)
d)这是真的吗? C / C ++程序员只需要OCI库来编写一个应用程序 连接到远程Oracle数据库&表操作?我们需要任何ODBC 司机呢?如果是,为什么? oci.lib不会足够吗?
FULL Oracle Client&即时Oracle客户端?是真的吗 Instant Oracle客户端只是FULL Oracle客户端的一个子集?
我无法获得各种Instant Client的互操作性矩阵 Oracle数据库。在Oracle网站上搜索了很多。我唯一能找到的就是链接 到我无法访问的Oracle支持网站。
请澄清我的疑虑。非常感谢提前。
答案 0 :(得分:3)
简言之:
OCI是C API库。还有一个名为OCCI的C ++库,但我不推荐它(你可以在各种编译器上遇到C ++ ABI更改/方言的问题)
Instant和“thick”Oracle客户端都包含OCI库(OCI.DLL
或linclntsh.so
)。 Instant客户端提供的一个或多或少是自包含的。 E.I.它不依赖于Oracle客户端提供的其他库(比较Linux上的ldd
或Windows上的depwalk
的输出)。
两者都包含必要的标题
两个客户端中的C API实际上是相同的。我记得唯一的例外是一组受支持的数据库本机字符集。 InstantClient仅支持UTF8
,ISO Latin1
和ASCII
。
“thick”客户端还包含一个名为“libxml.a”的库,当您要使用数据类型SYS.XMLTYPE
时,该库是必需的。此库不是(出于某种未知原因)与InstantClient捆绑在一起的
“thick”客户端还包含一些方便的诊断工具,例如tnsping
InstantClient非常容易“设置”。用户只需解压缩单个.zip文件即可。不必设置ORACLE_HOME
PATH
LD_LIBRARY_PATH
env。变量。你只需 dlopen()一个库文件即可。
InstanctClient可以在没有tnsnames.ora
的情况下工作(虽然它支持它)而不是你可以使用类似jdbc的EZCONNECT
除非您是Oracle业务合作伙伴,否则不得重新分发这两种类型的客户。所以你不能在你的应用程序中嵌入这些驱动程序的lib。每个用户必须单独下载。
到目前为止,我还没有找到一种如何区分InstantClient OCI.DLL库的C API方法。
Oracle调用接口程序员指南
我记得在设置ORACLE_HOME
env时,InstantClient可能存在一些问题。变量和它的值以斜杠结束(?或不结束?)'/'
答案 1 :(得分:0)
Oracle即时客户端是完整/" thick"的一小部分。客户。它包括OCI C库,JDBC和ODBC,这使得用C,Perl,Python,Java,Scala等编写的程序可以连接到Oracle数据库服务器。即时客户端不包括熟悉的Oracle工具,如sqlplus,sqlldr,exp,imp等。但是,可以单独安装sqlplus以使用即时客户端,而无需完整的客户端。