samedi 12 mai 2012

Installation & configuration de l'instant client Oracle

L'instant client Oracle, gratuit, est souvent la solution pour les machines qui doivent interroger des bases Oracle sans héberger de serveur, typiquement comme les machines de supervision.
L'installation est très simple lorsqu'on sait quels fichiers installer, quelles variables positionner et où placer les fichiers de configuration.
Ce post décrit rapidement les étapes d'installation et les chemins clefs, en se basant sur la version 11g.

Installation des binaires

Les binaires se téléchargent sur le site d'Oracle. Recherchez tout simplement dans les menus Downloads -> Instant Client pour trouver tout un listing de plateforme et d'architecture.

Attention au type d'architecture : même si les binaires 32 bits fonctionneront sur une machine 64 bits, le "linkage" d'une application 64 bits après compilation sur une librairie 32 bits ne fonctionnera pas. Ce cas de figure se rencontre en installant par exemple DBD::Oracle pour Perl : si votre machine est 64 bits, la compilation générera par défaut des binaires 64 bits et il vous faudra absolument les librairies Oracle 64 bits.
En cas de doute, une solution est de vérifier le format d'un fichier .o compilé récement. Par exemple pour DBD::Oracle :
# file Oracle.o
Oracle.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped

Pour ma part, pour une utilisation essentiellement via sqlplus et perl, je me contente de 3 packages :
  • Instant Client Package - Basic : les librairies de base de l'Instant Client
  • Instant Client Package - SQL*Plus : le fameux sqlplus, indispensable pour debugguer l'installation
  • Instant Client Package - SDK : le SDK qui nous permettera de compiler les librairies des autres langages, notamment DBD::Oracle de Perl
Je préfère récupérer les versions zip que rpm pour faire l'installation à la main, mais dans ce cas le suivi via le gestionnaire de package est impossible.

Une fois récupéré, l'installation est extrêmement simple : dézipper et déplacer les fichiers dans le dossier cible.
Exemple :
# unzip instantclient-basic-linux.x64-11.2.0.3.0.zip
# unzip instantclient-sdk-linux.x64-11.2.0.3.0.zip
# unzip instantclient-sqlplus-linux.x64-11.2.0.3.0.zip
# mkdir /opt/oracle/instantclient
# mv instantclient_11_2/* /opt/oracle/instantclient

Configuration des variables d’environnement

Deux variables sont indispensables pour faire fonctionner Oracle, en plus du PATH pour sqlplus :
  • ORACLE_HOME : utilisé par Oracle, doit pointer sur le dossier d'installation d'Oracle
  • LD_LIBRARY_PATH : utilisé par l'OS pour trouver les librairies partagées d'Oracle
Les deux doivent pointer sur le dossier d'installation de l'InstantClient.
Si LD_LIBRARY_PATH n'est pas ou mal positionné, le message est clair :
# sqlplus
sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
Dans l'exemple précédent, les deux variables doivent être positionnées sur /opt/oracle/instantclient.
Pour ne pas avoir à les redéfinir à chaque fois, ajoutez les dans /etc/profile.

Pour finir, tester en lançant sqlplus qui doit demander le login si tout est bien positionné :
# sqlplus

SQL*Plus: Release 11.2.0.3.0 Production on Tue May 12 20:34:35 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter user-name:

SQLPlus : petit rappel de syntaxe

Petit rappel de syntaxe de la commande sqlplus car je ne la trouve pas intuitive du tout. En cas de doute, sqlplus -h a la solution :)
  • sqlplus login/password@//ip:port/SID : pour entrer l'adresse complète de la base
  • sqlplus login/password@TNS : si la base est configurée dans un tnsname.ora (normalement ce n'est pas le cas à cette étape de l'installation)

Problème ORA-21561: OID generation failed

Il m'est arrivé plusieurs fois d'obtenir ce message lors du test d'installation en ouvrant réellement une connexion sur un serveur qui fonctionne :
# sqlplus login/password@//198.168.5.4/BASEDETEST

SQL*Plus: Release 11.2.0.3.0 Production on Tue May 12 20:36:22 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-21561: OID generation failed
Cette erreur apparaît car le nom d'hôte renseigné dans /etc/hosts n'est pas bon. Dans mon cas, j'avais :
127.0.0.1       localhost
Il faut que le nom qui apparait dans /etc/hosts soit le même que celui que renvoie la commande hostname.

Configuration des connexions (tnsnames.ora)

Ce fichier est bien pratique pour centraliser les paramètres de connexion et ne pas avoir à les retaper à de multiples endroits, encore faut-il placer le fichier au bon endroit...
Deux possibilités :
  • $ORACLE_HOME/network/admin/tnsnames.ora : c'est la solution que je préfère, il suffit de créer le dossier network/admin et aucune configuration supplémentaire n'est nécessaire
  • $TNS_ADMIN/tnsnames.ora : permet de mettre le tnsnames.ora n'importe où, éventuellement d'en avoir des différents par utilisateur, mais demande la configuration d'une variable d'environnement supplémentaire
Pour mémoire le format d'une ligne dans ce fichier (en italic orange les valeurs à modifier) :
nom_tns=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=community)(PROTOCOL=TCP)(HOST=adresse_ip_ou_hostname)(PORT=port_1521_par_defaut)))(CONNECT_DATA=(SID=sid)))
Une fois en place, il ne reste plus qu'à tester avec sqlplus (cf ci dessus pour la syntaxe) !

Aucun commentaire:

Enregistrer un commentaire