Installation du module perl DBD::Oracle sur linux


1) Introduction

Ce document décrit la mise en oeuvre du module perl DBD::Oracle sur une machine x86 avec une distribution linux quelconque. Ce module permet la connexion à une base de données Oracle à partir de perl au moyen de l'interface cliente (API) DBI.

La méthode décrite ici se veut la plus directe et générale pour obtenir un module perl DBD::Oracle fonctionnel. Nous n'utiliserons par exemple pas le produit Oracle Developper Suite car il est très lourd, et ne s'installe que sur RedHat ES/AS 3 et UnitedLinux 1.0 .

La méthode a été testé avec succés pour la version 10.1.0.3 de l' Oracle Instant client 10g
avec les ditributions: Debian 3.1 (Sarge) et RedHat AS3.



Schema situant DBD::Oracle

2) Pré-requis

Avant de commencer, assurez vous que vous avez:

3) Installation des drivers Oracle

Les drivers Oracle (propriétaires) côté client pour linux sont téléchargeable à l'adresse:
Oracle Instant Client pour linux (x86)

Rendez-vous sur cette page et téléchargez ces 2 paquets:
Lors de l'écriture de ce document seuls des paquets RedHat ( au format rpm ) sont disponnibles.

Pour installer ces paquets avec une distribution ReadHat ou tout autre distribution utilisant des paquets rpm ( Suze, Mandrake...), ouvrez une console en super-utilisateur et tapez:

# rpm -ihv paquet.rpm

Sinon, avec une distribution qui ne gère pas les paquets rpm, ouvrez une console en super-utilisateur et tapez :

# cd /
# rpm2cpio chemin/paquet.rpm | cpio -idmv


Mise a jour: Depuis le 12 October 2005, oracle fournit une archive .zip pour distribuer l'instantclient.
Il n'y a aucun probleme avec cela si ce n'est que les archives .zip ne supportent pas les liens symboliques. Afin de permettre a l'editeur de liens (ld) de trouver les bibliotheques de l'instantclient, vous devez creer vous-meme 2 liens symboliques apres avoir decompresse l'archive de l'instantclient:

Par exemple, pour que l'editeur de lien lie avec la version 10.1 par defaut:

# ln -s libclntsh.so.10.1 libclntsh.so
# ln -s libocci.so.10.1 libocci.so



4) Compilation et Installation du module DBD::Oracle

4.1) Récupération du module avec CPAN:


Ouvrez une console en root, et tapez:

#perl -MCPAN -e shell

au prompt de CPAN, tapez:

cpan> get DBD::Oracle
cpan> quit

Maintenant, CPAN doit avoir récupéré la dernière version des sources du module DBD::Oracle ( au jour de l'écriture de cette documentation, c'est la version 1.16 ) dans le répertoire /root/.cpan/build ( selon votre configuration de CPAN. Dans le cas contraire, CPAN vous indique l'emplacement où il a stocké les sources du module)

4.2) Copie et adaptation du Makefile

Normalement, le programme d'installation automatisé du module DBD::Oracle (contenu dans le fichier Makefile.PL) essaye de déterminer les fihciers à inclure ainsi que les bibliothèque avec lesquelles lier le module DBD::Oracle.
Cependant, ce programme se fie à une installation complète d'Oracle (au moins de la partie client). Il a donc besoin de beaucoup plus d'éléments que nous en avons installé sur notre système et c'est pourquoi la procédure automatique ne fonctionnerai pas.

A la place, copiez ce script : Makefile-instantclient.PL dans le dossier /root/.cpan/build/DBD-Oracle-x.xx ( ou le dossier analogue adapté à votre configuration de CPAN)


Copiez le fichier oracle-instantclient-config dans votre répertoire /usr/bin

Remarque: Vous pouvez, selon vos préférences ( ou contraintes ) placer ce fichier dans un autre repertoire comme( /usr/local/bin, /opt/oracle_instantclient/bin, etc... selon vos préférences. Assurez vous que le dossier où vous le placerez figure dans la variable d'environement PATH.

Posez les droits d'accés:
# chmod 755 /usr/bin/oracle-installclient-config

Si vous n'avez pas installé l'instantclient dans l'emplacement par défaut ( avec le préfixe /usr/ ) éditez le fichier oracle-instantclient-config et positionnez la valeur de la variable prefix ( ligne 4 ) afin qu'elle reflète votre installation.



4.3)  Compilation

Depuis le répertoire /root/.cpan/DBD-Oracle-x.xx, tapez:

$ perl Makefile-instantclient.PL
$ make


Si vous avez une rreur, quelques indice:



- Si le compilateur (gcc) vous dit qu'il n'a pas trouvé un ou des fichiers à inclure (.h),

tapez:
$ oracle-instantclient-config --cflags

et vérifiez que les fichiers d'interface client oracle (fichiers .h) sont bien dans le répertoire indiqué

- Si le l'éditeur des liens (ld) ne trouve pas des bibliothèques (*.so.*),

tapez:
$ oracle-instantclient-config --libs

et vérifiez en que les bibliothèques sont bien dans le repertoire indiqué ( après le paramètre -L )

Dans ces 2 cas, revenez à l'étape  4.2 et adaptez correctement le fichier oracle-instantclient-config à votre installation de l'oracle instantclient basic et oracle instantclient sdk.



4.4) Installation


Tapez simplement ( en root):

# make install

Si tout c'est bien passé, votre module DBD::Oracle doit être prêt, vérifions

Test:

  Copiez le programme perl suivant ( télécharger test_dbd_oracle.pl):

#!/usr/bin/perl

$oracle_server="SERVEUR_ORACLE";
$oracle_listener="LISTENER";
$oracle_sid="SID";
$oracle_port="PORT";
$oracle_user="USER";
$oracle_password="MOT_DE_PASSE";
$oracle_table_de_test="TABLE_DE_TEST";

use DBI;
use DBD::Oracle;

my $dbh = DBI->connect("dbi:Oracle:host=$oracle_server;port=$oracle_port;sid=$oracle_sid",
                                           $oracle_user, $oracle_password)
  or die "Impossible de se connecter à la base Oracle : " . DBI->errstr;

my $sth = $dbh->prepare("SELECT * FROM $oracle_table_de_test")
  or die "Impossible de preparer la requette: " . $dbh->errstr;

$sth->execute()
  or die "Impossible d'exécuter la requette: " . $sth->errstr;

while ( my @data = $sth->fetchrow_array() )
{
    my $firstname = $data[1];
    my $id = $data[2];
    print "\t$id: $firstname $lastname\n";
}

if ($sth->rows == 0)
{
    print "Table vide\n";
}

$sth->finish;

$dbh->disconnect;



Adaptez les variables des 7 premières lignes et lancez le programme


Références:



Liens:

Paquets RPM pour RHEL4 qui permettent d'installer perl-DBD-Oracle avec instant-client créés par Mathias Saou. (ainsi que des patchs pour compiler le module Oracle de PHP avec l'instant client d'Oracle)


Jean-Christophe Duberga, jeanchristophe.duber >AT< free.fr - CRI - Université Bordeaux2