Tuesday, September 4, 2007

Installing Perl DBD::Oracle against 10g

I just installed oracle instantclient and perl DBD against 10g. Following was my configuration

  • OS: Fedora 7
Make sure that you have libstdc++.so.5 installed. It can be installed as follows
$ yum install compat-libstdc++-33

  • Oracle Instant client: 10.2.0.3
this constitutes of the following 3 rpms that you can get from oracle's website
    • oracle-instantclient-basic-10.2.0.3-1.i386.rpm
    • oracle-instantclient-devel-10.2.0.3-1.i386.rpm
    • oracle-instantclient-sqlplus-10.2.0.3-1.i386.rpm
(I believe you can skip the sqlplus installation, but I installed it).

  • DBD::Oracle: 1.19
Verify that the oracle installation is working by typing the following on your command prompt

$ sqlplus

You should get the following output

SQL*Plus: Release 10.2.0.3.0 - Production on Thu Aug 30 00:14:22 2007

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.


Enter user-name:


Set the following environment variables

$ export LD_LIBRARY_PATH = /usr/lib/oracle/10.2.0.3/client/lib/
$ export ORACLE_SID = <SID>
$ export ORACLE_USERID = <username>/<password>@<servername>/<SID>

I had problems with ORACLE_HOME environment variable. When it was set to /usr/lib/oracle/10.2.0.3/client/lib/ I would get the following error message from sqlplus

Error 6 initializing SQL*Plus
Message file sp1.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory

removing the variable ORACLE_HOME did the trick.

I downloaded DBD::Oracle from CPAN


$ perl -MCPAN -e shell

cpan> get Oracle::DBD
cpan> quit

change directory to ~/.cpan/build/DBD-Oracle-x.xx and run the following command

$ perl Makefile.PL -m /usr/share/oracle/10.2.0.3/client/demo.mk
$ make
$ make test

Following is the output of the test runs

t/01base................ok
t/10general.............ok
t/15nls.................ok
t/20select..............ok
t/21nchar............... Database and client versions and character sets:
Database 10.2.0.1.0 CHAR set is AL32UTF8 (Unicode), NCHAR set is AL16UTF16 (Unicode)
Client 10.2.0.3 NLS_LANG is '', NLS_NCHAR is ''
t/21nchar...............ok
t/22nchar_al32utf8......ok
t/22nchar_utf8..........ok
t/23wide_db.............ok
t/23wide_db_8bit........ok
t/23wide_db_al32utf8....ok
t/24implicit_utf8.......ok
t/25plsql...............ok
t/26exe_array...........ok
t/30long................ok
122/470 skipped: various reasons
t/31lob.................ok 7/9DBD::Oracle::db selectrow_array failed: ORA-00942: table or view does not exist (DBD ERROR: error possibly near <*> indicator at char 103 in '
SELECT cache_lobs + nocache_lobs AS temp_lob_count
FROM v$temporary_lobs templob, <*>v$session sess
WHERE sess.sid = templob.sid
AND sess.audsid = userenv('sessionid') ')
[for Statement "
SELECT cache_lobs + nocache_lobs AS temp_lob_count
FROM v$temporary_lobs templob, v$session sess
WHERE sess.sid = templob.sid
AND sess.audsid = userenv('sessionid') "] at t/31lob.t line 58.
t/31lob.................NOK 9/9
# Failed test 'no temp lobs left'
# at t/31lob.t line 166.
# got: undef
# expected: '0'
# Looks like you failed 1 test of 9.
t/31lob.................dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 9
Failed 1/9 tests, 88.89% okay
t/40ph_type.............ok 3/19 Placeholder behaviour for ora_type=1 (the default) varies with
Oracle version.
Oracle 7 didn't strip trailing spaces, Oracle 8 did, until 9.2.x Your system doesn't. If that seems odd, let us know.
t/40ph_type.............ok
t/50cursor..............ok
t/55nested..............ok
t/60reauth..............ORACLE_USERID_2 not defined. Tests skipped.
skipped all skipped: no reason given
t/70meta................ok
Failed Test Stat Wstat Total Fail List of Failed
-------------------------------------------------------------------------------
t/31lob.t 1 256 9 1 9
1 test and 122 subtests skipped.
Failed 1/20 test scripts. 1/1062 subtests failed.
Files=20, Tests=1062, 455 wallclock secs ( 3.60 cusr + 11.08 csys = 14.68 CPU)
Failed 1/20 test programs. 1/1062 subtests failed.
make: *** [test_dynamic] Error 255

To install the module run


$ make install

Perl module was good to go.

No comments: