Reputation:
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.
OCI is basically a set of APIs which the C/C++ programmers can use to write C/C++ applications to access Oracle Database.
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?
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?
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.
Upvotes: 3
Views: 2462
Reputation: 3777
Oracle instant client is a small subset of the full/"thick" client. It includes the OCI C-libraries, JDBC and ODBC which makes is possible for programs written in C, Perl, Python, Java, Scala and so on to connect to an Oracle database server. Instant client dont include familiar Oracle tools like sqlplus, sqlldr, exp, imp and more. However, sqlplus can be installed separately to work with instant client without needing a full client.
Upvotes: 0
Reputation: 5288
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 '/'
Upvotes: 3