OCI& Instant Client SDK& Oracle数据库

时间:2013-10-28 08:31:45

标签: oracle oci instantclient

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

从谷歌搜索,我只是想确认理解是正确的。欢迎大家指出我错了。

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

  2. 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不会足够吗?

  3. FULL Oracle Client&即时Oracle客户端?是真的吗 Instant Oracle客户端只是FULL Oracle客户端的一个子集?

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

  5. 请澄清我的疑虑。非常感谢提前。

2 个答案:

答案 0 :(得分:3)

简言之:

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

  • Instant和“thick”Oracle客户端都包含OCI库(OCI.DLLlinclntsh.so)。 Instant客户端提供的一个或多或少是自包含的。 E.I.它不依赖于Oracle客户端提供的其他库(比较Linux上的ldd或Windows上的depwalk的输出)。

  • 两者都包含必要的标题

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

  • “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调用接口程序员指南

  • 中有InstantClient特定部分
  • 我记得在设置ORACLE_HOME env时,InstantClient可能存在一些问题。变量和它的值以斜杠结束(?或不结束?)'/'

答案 1 :(得分:0)

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