Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OCI & Instant Client SDK & Oracle Database

Sorry for being the question very naive but the same is true for my experience with the subject.

From the googling what i understood i just want to confirm that the understanding is correct. Everyone is welcome to pin point where i am wrong.

  1. OCI is basically a set of APIs which the C/C++ programmers can use to write C/C++ applications to access Oracle Database.

  2. a) Oracle instant client SDK is a (DLL/Shared library) which USES OCI (???). The C/C++ code written by C/C++ programmers links to the Oracle instant client libraries & hence uses OCI as well. b) The benefit of instant client is that it eases the programmers pain to write some complex code(??). c) Even if C/C++ programmer doesn't use Instant Client libraries, they can still use OCI & get the work done (Is this correct??)

    d) Is this true? C/C++ programmers just need OCI library to write an application which connects to Remote Oracle database & does table operations? Do we need any ODBC
    drivers also? If yes, why? Won't oci.lib be enough?

  3. What is the difference between FULL Oracle Client & Instant Oracle Client? Is it true that Instant Oracle client is just a subset of FULL Oracle client?

  4. I am not able to obtain the interoperatibility matrix of Instant Client will various Oracle databases. Searched alot on Oracle website. The only thing i could find is link to Oracle support site which i can't access.

Please clarify my doubts. Many thanks in advance.


1 Answers

Briefly:

  • OCI is C API libary. There is also C++ library called OCCI, but I do not recommend it(you can have problems with C++ ABI changes/dialects on various compilers)

  • Both Instant and "thick" Oracle client contain OCI library (OCI.DLL or linclntsh.so). The one provided by Instant client is more-or-less self-contained. e.i. it does not depend on other libs provided with Oracle client (compare output from ldd on Linux or depwalk on Windows).

  • Both also contain necessary headers

  • The C API in both clients is practically identical. The only exception I recall is a set of supported database native characters sets. InstantClient supports only UTF8, ISO Latin1 and ASCII.

  • "thick" client also contains a library named "libxml.a" which is needed when you want to use datatype SYS.XMLTYPE. This library is not (for some unknown reason) bundled with InstantClient

  • "thick" client also contains some handy diagnostic tools like tnsping

  • InstantClient is very easy to "setup". Users simply unpack a single .zip file. Do not have to set ORACLE_HOME PATH LD_LIBRARY_PATH env. variables. You simply dlopen() one library file and that's all.

  • InstanctClient can work without tnsnames.ora (although it supports it) instead of that you can use jdbc-like EZCONNECT

  • Both types of clients may not be re-distributed, unless you're Oracle businesses partner. So you must not embed these driver's lib in your application. Each user must download then separately.

  • So far I have not found a C API way how to distinguish InstantClient OCI.DLL libary.

  • There is InstantClient specific section in Oracle Call Interface Programmer's Guide

  • I recall there might be some problems with InstantClient when you set ORACLE_HOME env. variable and it's values ends (?or does not end?) with slash '/'

like image 129
ibre5041 Avatar answered Mar 28 '26 16:03

ibre5041



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!