Introduction


Why did I need the 9i version of the instantclient package? Why not use the Oracle 10g or 11i InstantClient package? If you googled so far, you might already have an idea why. In our environment is a legacy Oracle  8 database, version 8.0.5, in full production. Whatever the reasons for not upgrading it, I needed a way to monitor it and connect remotely. The first problem, which version of Oracle is backward compatible to what?  This information was difficult to get: it turns out that the last version of Oracle that supports Oracle 8.0.5 is Oracle 9i. Everything after that will not connect. This includes the OCI client and JDBC drivers as well. Luckily Oracle 9i is still available for download, but only in the full 3-disk database package, requiring a full installation. I needed the OCI instantclient funtionality to make the Nagios monitoring plugin check_oracle work. Also, I wanted to use the SQLplus and tnsping commandline.

Download the Oracle 9i 64bit Edition and extract the content:


My target system is a 64bit SuSE Linux Enterprise Server SP2 with Nagios 3.0.2, so I downloaded the Oracle 9i 64bit packages. Don't get irritated by the "amd64" file name references to AMD, it certainly works with Intel 64bit also...

fm@ml08460:/home/sw/Oracle9i>
ls -l
total 1461956
-rw-r--r-- 1 root root 552344576 2008-06-19 11:56 amd64_db_9204_Disk1.cpio
-rw-r--r-- 1 root root 587835392 2008-06-19 11:58 amd64_db_9204_Disk2.cpio
-rw-r--r-- 1 root root 355244544 2008-06-19 11:59 amd64_db_9204_Disk3.cpio

extract it with:

fm@ml08460:/home/sw/Oracle9i> gunzip amd64_db_9204_Disk1.cpio.gz
fm@ml08460:/home/sw/Oracle9i> gunzip amd64_db_9204_Disk2.cpio.gz
fm@ml08460:/home/sw/Oracle9i> gunzip amd64_db_9204_Disk3.cpio.gz

fm@ml08460:/home/sw/Oracle9i> cpio -idcmv < amd64_db_9204_Disk1.cpio
fm@ml08460:/home/sw/Oracle9i> cpio -idcmv < amd64_db_9204_Disk2.cpio
fm@ml08460:/home/sw/Oracle9i> cpio -idcmv < amd64_db_9204_Disk3.cpio

fm@ml08460:/home/sw/Oracle9i> ls -ld D*
drwxr-xr-x 6 2840 502 4096 2004-05-01 06:49 Disk1
drwxr-xr-x 3 2840 502 4096 2004-05-01 06:49 Disk2
drwxr-xr-x 3 2840 502 4096 2004-05-01 06:49 Disk3

Create the new home directory for Oracle 9i


There is no need to create a extra oracle user or group, as long as the account accessing the Oracle client has the ORACLE_HOME and LD_LIBRARY´╝┐PATH set correctly. LD_LIBRARY PATH can be avoided by an entry in /etc/ld.so.conf. For my setup, the installation required approximately 46 MB of disk space.

mkdir -p /home/oracle/instantclient_9
cd /home/oracle/instantclient_9

Extract the bare minimum client libraries required for the OCI client


This is the most tricky part to figure out. Error messages pointed the way to which files are missing, and strace is a great help to determine what else goes wrong. For this step we need the Java development kit (JAVASDK) to get the Java binary jar, allowing us to ectract the libraries from its Oracle package containers. Jar handling is almost like tar.

fm@ml08460:/home/oracle/instantclient_9> jar xf
/home/sw/Disk2/stage/Components/oracle.rdbms.sqlplus/9.2.0.4.0/1/DataFiles/lib.1.1.jar
fm@ml08460:/home/oracle/instantclient_9> jar xf
/home/sw/Disk2/stage/Components/oracle.rdbms.occi/9.2.0.4.0/1/DataFiles/lib.1.1.jar
fm@ml08460:/home/oracle/instantclient_9> jar xf
/home/sw/Disk1/stage/Components/oracle.rsf.clntsh_rsf/9.2.0.4.0/1/DataFiles/lib.1.1.jar

fm@ml08460:/home/oracle/instantclient_9> ln -s libclntsh.so.9.0 libwtc9.so

Extract the SQLplus and Oracle NET client commands, add the SQLplus message file


These files provide the commandline interface and the basic error messages.

fm@ml08460:/home/oracle/instantclient_9> mkdir bin
fm@ml08460:/home/oracle/instantclient_9> cd bin
fm@ml08460:/home/oracle/instantclient_9/bin> jar xf
/home/sw/Disk2/stage/Components/oracle.rdbms.sqlplus/9.2.0.4.0/1/DataFiles/bin.1.1.jar
fm@ml08460:/home/oracle/instantclient_9/bin> jar xf
/home/sw/Disk2/stage/Components/oracle.networking.netclt/9.2.0.4.0/1/DataFiles/bin.1.1.jar
fm@ml08460:/home/oracle/instantclient_9/bin> cd ..

fm@ml08460:/home/oracle/instantclient_9> mkdir -p sqlplus/mesg

fm@ml08460:/home/oracle/instantclient_9> cd sqlplus/mesg
fm@ml08460:/home/oracle/instantclient_9/sqlplus/mesg> jar xf
/home/sw/Disk2/stage/Components/oracle.rdbms.sqlplus/9.2.0.4.0/1/DataFiles/mesg.1.1.jar
fm@ml08460:/home/oracle/instantclient_9/sqlplus/mesg>
cd ../..

Extract the TimeZone Info file for SQLplus


Next, we need the timezone.dat and timezonelrg.dat files

fm@ml08460:/home/oracle/instantclient_9> mkdir -p oracore/zoneinfo
fm@ml08460:/home/oracle/instantclient_9> cd oracore/zoneinfo
fm@ml08460:/home/oracle/instantclient_9/oracore/zoneinfo> jar xf
/home/sw/Disk1/stage/Components/oracle.rsf.oracore_rsf/9.2.0.4.0/1/DataFiles/zone.1.1.jar
fm@ml08460:/home/oracle/instantclient_9/oracore/zoneinfo> cd ../..

Extract the Network Client message files


Now we are extracting the network client message files, i.e. containing the tnsping error messages:

fm@ml08460:/home/oracle/instantclient_9> mkdir -p network/mesg
fm@ml08460:/home/oracle/instantclient_9> cd network/admin
fm@ml08460:/home/oracle/instantclient_9/network/admin> jar xf
/home/sw/Oracle9i/Disk2/stage/Components/oracle.networking.netclt/9.2.0.4.0/1/DataFiles/mesg.1.1.jar
fm@ml08460:/home/oracle/instantclient_9/network/admin> cd ../..

Almost there. We create the client configuration files, tnsnames.ora and sqlnet.ora.


Appearantly, the values there depend on your DB location and settings.

fm@ml08460:/home/oracle/instantclient_9> mkdir -p network/admin
fm@ml08460:/home/oracle/instantclient_9> cd network/admin
fm@ml08460:/home/oracle/instantclient_9/network/admin> vi tnsnames.ora
fm@ml08460:/home/oracle/instantclient_9/network/admin> vi sqlnet.ora

In order for the check_oracle to work in nagios, I added the export commands on top of /etc/init.d/nagios startup program.

fm@ml08460:/home/oracle> export ORACLE_HOME=/home/oracle/instantclient_9
fm@ml08460:/home/oracle/> export LD_LIBRARY_PATH=/home/oracle/instantclient_9

Finally we can try it out:


Voila, it works...

fml08460:/home/oracle/instantclient_9 # bin/sqlplus xxxxx@yyyy
SQL*Plus: Release 9.2.0.4.0 - Production on Tue Jun 24 17:42:16 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Enter password:

Connected to:
Oracle8 Enterprise Edition Release 8.0.5.2.1 - Production
PL/SQL Release 8.0.5.2.0 - Production

SQL>

ml08460:/home/local/oracle/instantclient_9 # du -sk .
45464

Reference file listing


Below is a complete list of files, representing a working Oracle 9i instantclient setup.

fm@ml08460:~ # ls -lR /home/oracle/instantclient_9
/home/oracle/instantclient_9: total 36792
drwxr-xr-x 2 root root     4096 2008-06-25 09:18 bin
-rw-r--r-- 1 root root     2588 2008-06-24 16:47 facility.lis
-rw-r--r-- 1 root root 13189409 2008-06-24 16:47 libclntsh.so.9.0
-rw-r--r-- 1 root root 21223006 2008-06-24 16:47 libclntst9.a
-rw-r--r-- 1 root root  1024802 2008-06-24 16:48 libocci9.a
-rw-r--r-- 1 root root   471160 2008-06-24 16:48 libocci.so.9.0
-rw-r--r-- 1 root root  1332204 2008-06-24 16:47 libsqlplus.a
lrwxrwxrwx 1 root root       51 2008-06-24 18:46 libwtc9.so ->
 /home/oracle/instantclient_9/libclntsh.so.9.0
-rw-r--r-- 1 root root   319208 2008-06-24 16:47 libxsd9.a
drwxr-xr-x 4 root root     4096 2008-06-25 09:20 network
drwxr-xr-x 3 root root     4096 2008-06-24 17:16 oracore
-rw-r--r-- 1 root root     2638 2008-06-25 17:09 readme.20080624
-rw-r--r-- 1 root root     1432 2008-06-24 16:47 s0afimai.o
drwxr-xr-x 3 root root     4096 2008-06-24 17:01 sqlplus
-rw-r--r-- 1 root root       25 2008-06-24 16:47 sysliblist

/home/oracle/instantclient_9/bin:
total 7164
-rwxr-xr-x 1 root root   12977 2008-06-25 09:14 adapters
-rwxr-xr-x 1 root root    2387 2008-06-25 09:14 gensyslib
-rwxr-xr-x 1 root root    2131 2008-06-23 13:10 helpins
-rwxr-xr-x 1 root root 3182232 2008-06-25 09:14 namesctl
-rwxr-xr-x 1 root root    2365 2008-06-25 09:14 oerr
-rwxr-xr-x 1 root root 3342889 2008-06-25 09:14 onrsd
-rwxr-xr-x 1 root root    1745 2008-06-23 13:10 pupbld
-rwxr-xr-x 1 root root  700268 2008-06-23 13:10 sqlplus
-rwxr-xr-x 1 root root   20116 2008-06-25 09:14 tnsping
-rwxr-xr-x 1 root root    2967 2008-06-25 09:14 trcasst.sbs
-rwxr-xr-x 1 root root    1268 2008-06-25 09:14 trcfmt
-rwxr-xr-x 1 root root   30892 2008-06-25 09:14 trcroute

/home/oracle/instantclient_9/network:
total 8
drwxr-xr-x 2 root root 4096 2008-06-23 13:11 admin
drwxr-xr-x 2 root root 4096 2008-06-25 09:21 mesg

/home/oracle/instantclient_9/network/admin:
total 8
-rw-r--r-- 1 root root  44 2008-06-23 13:11 sqlnet.ora
-rw-r--r-- 1 root root 530 2008-06-23 13:11 tnsnames.ora

/home/oracle/instantclient_9/network/mesg:
total 764
-rw-r--r-- 1 root root   6144 2008-06-25 09:21 ncrus.msb
-rw-r--r-- 1 root root  16420 2008-06-25 09:21 ncrus.msg
-rw-r--r-- 1 root root   5632 2008-06-25 09:21 ncxus.msb
-rw-r--r-- 1 root root  11426 2008-06-25 09:21 ncxus.msg
-rw-r--r-- 1 root root  10240 2008-06-25 09:21 niqus.msb
-rw-r--r-- 1 root root  52054 2008-06-25 09:21 niqus.msg
-rw-r--r-- 1 root root   3584 2008-06-25 09:21 nmpus.msb
-rw-r--r-- 1 root root   5895 2008-06-25 09:21 nmpus.msg
-rw-r--r-- 1 root root   4608 2008-06-25 09:21 nmrus.msb
-rw-r--r-- 1 root root  12464 2008-06-25 09:21 nmrus.msg
-rw-r--r-- 1 root root   5632 2008-06-25 09:21 nncus.msb
-rw-r--r-- 1 root root  21630 2008-06-25 09:21 nncus.msg
-rw-r--r-- 1 root root   8704 2008-06-25 09:21 nnfus.msb
-rw-r--r-- 1 root root  17859 2008-06-25 09:21 nnfus.msg
-rw-r--r-- 1 root root  26624 2008-06-25 09:21 nnlus.msb
-rw-r--r-- 1 root root  67325 2008-06-25 09:21 nnlus.msg
-rw-r--r-- 1 root root  13312 2008-06-25 09:21 nnous.msb
-rw-r--r-- 1 root root  62515 2008-06-25 09:21 nnous.msg
-rw-r--r-- 1 root root   5120 2008-06-25 09:21 nplus.msb
-rw-r--r-- 1 root root  11827 2008-06-25 09:21 nplus.msg
-rw-r--r-- 1 root root   9216 2008-06-25 09:21 nzus.msb
-rw-r--r-- 1 root root   9256 2008-06-25 09:21 nzus.msg
-rw-r--r-- 1 root root   6144 2008-06-25 09:21 snlus.msb
-rw-r--r-- 1 root root   4658 2008-06-25 09:21 snlus.msg
-rw-r--r-- 1 root root   3584 2008-06-25 09:21 tnlus.msb
-rw-r--r-- 1 root root   1041 2008-06-25 09:21 tnlus.msg
-rw-r--r-- 1 root root   7168 2008-06-25 09:21 tnplus.msb
-rw-r--r-- 1 root root   5697 2008-06-25 09:21 tnplus.msg
-rw-r--r-- 1 root root  46592 2008-06-25 09:21 tnsus.msb
-rw-r--r-- 1 root root 233050 2008-06-25 09:21 tnsus.msg

/home/oracle/instantclient_9/oracore:
total 4
drwxr-xr-x 2 root root 4096 2008-06-24 17:28 zoneinfo

/home/oracle/instantclient_9/oracore/zoneinfo:
total 520
-rw-r--r-- 1 root root 370494 2008-06-24 17:28 timezlrg.dat
-rw-r--r-- 1 root root 148797 2008-06-24 17:28 timezone.dat

/home/oracle/instantclient_9/sqlplus:
total 4
drwxr-xr-x 2 root root 4096 2008-06-24 17:11 mesg

/home/oracle/instantclient_9/sqlplus/mesg:
total 196
-rw-r--r-- 1 root root   4096 2008-06-24 17:10 cpyus.msb
-rw-r--r-- 1 root root   1817 2008-06-24 17:10 cpyus.msg
-rw-r--r-- 1 root root  11264 2008-06-24 17:10 sp1us.msb
-rw-r--r-- 1 root root  16590 2008-06-24 17:10 sp1us.msg
-rw-r--r-- 1 root root  31232 2008-06-24 17:10 sp2us.msb
-rw-r--r-- 1 root root 114029 2008-06-24 17:10 sp2us.msg
-rw-r--r-- 1 root root   3584 2008-06-24 17:10 sp3us.msb
-rw-r--r-- 1 root root    506 2008-06-24 17:10 sp3us.msg