Introduction
Lors de la construction de la couche unixODBC 2.3.0 sous Solaris 10 x86 et
d’un test de connexion ODBC vers Oracle 11g R2, mauvaise surprise : le pilote
natif Oracle libsqora.so.11.1
pour ODBC dans $ORACLE_HOME/lib
n’est pas
présent.
L’option ODBC a bien été sélectionnée lors de la configuration de
l’installation mais la librairie libsqora.so.11.1
n’a pas été construite car la
couche unixODBC était manquante lors de l’installation. Pas de panique, il est
encore possible de construire cette couche ODBC avec le compte unix oracle sans
devoir exécuter à nouveau l’installeur Oracle Universal Installer ou
réinstaller la distribution Oracle. Les étapes sont décrites dans cette
note.
Il s’agit ici d’une distribution Oracle 11.2.0.2 64 bits installée dans le
répertoire /Software/oracle/app/product/11.2.0
($ORACLE_HOME
) sur une
plateforme Sun Solaris 10 x86. Dès maintenant la variable d’environnement
$ORACLE_HOME
est initialisée si ce n’est pas le cas :
% ORACLE_HOME=/Software/oracle/app/product/11.2.0
% export ORACLE_HOME
Pour plus d’informations sur la compilation d’unixODBC 2.3.0 avec SunStudio 12.1 : unixODBC 2.3.0, compilation et utilisation sous Sun Solaris 10 X86.
Pré-requis
Vérifier que l’option ODBC a bien été sélectionnée lors de l’installation avec Oracle Universal Installer.
Pour s’en assurer, le répertoire $ORACLE_HOME/odbc
doit exister avec des
fichiers make
(*.mk
) et des librairies archives (*.a
) dans le répertoire
$ORACLE_HOME/odbc/lib
:
% cd $ORACLE_HOME/odbc/lib % ls
ins_odbc.mk env_odbc.mk utility.a sqoci.a sqora.a
Si ce n’est pas le cas, l’option ODBC n’a pas été sélectionnée, relancer l’installation avec Oracle Universal Installer pour sélectionner le composant ODBC.
ins_odbc.mk
est le fichier make pour construire la librairie
libsqora.so.11.1
à partir notamment des librairies archives utility.a, sqoci.a
et sqora.a
générées à l’installation. unixODBC n’existait pas lors de
l’installation, les commandes make
dans ins_odbc.mk
sont tombées en erreur lors
de l’installation sans toutefois avorter l’installation d’Oracle 11g R2.
Construction de la librairie ODBC native Oracle libsqora.so.11.1
Si le répertoire /usr/ccs/bin
n’est pas référencé dans la variable PATH
,
celui-ci y est ajouté afin d’appeler l’exécutable make
qui s’y trouve :
% PATH=/usr/ccs/bin:$PATH
% export PATH
Les librairies unixODBC sont référencées dans la variable LD_LIBRARY_PATH
.
Dans le contexte de cet article, unixODBC est installé dans le répertoire
/Software/tools/unixodbc
.
% LD_LIBRARY_PATH=/Software/tools/unixodbc/lib:$LD_LIBRARY_PATH
% export LD_LIBRARY_PATH
Les commandes make
sont alors lancées en donnant en paramètre le fichier
ins_odbc.mk
et isqora
:
% cd $ORACLE_HOME/odbc/lib % make -f ns_odbc.mk isqora
- Linking sqora rm -f /Software/oracle/app/product/11.2.0/odbc/lib/libsqora.so.11.1 /usr/ccs/bin/ld -o /Software/oracle/app/product/11.2.0/odbc/lib/libsqora.so.11.1 -L/Software/oracle/app/product/11.2.0/odbc/lib/ -L/Software/oracle/app/product/11.2.0/lib/ -dy `cat /Software/oracle/app/product/11.2.0/lib/sysliblist` -lm -64 -G -z textoff -h libsqora.so.11.1 -zinitarray=initSqora -zfiniarray=finiSqora -z allextract /Software/oracle/app/product/11.2.0/odbc/lib/sqora.a /Software/oracle/app/product/11.2.0/odbc/lib/sqoci.a /Software/oracle/app/product/11.2.0/odbc/lib/utility.a -z defaultextract -R /Software/oracle/app/product/11.2.0/lib -L /Software/oracle/app/product/11.2.0/lib -L /Software/oracle/app/product/11.2.0/odbc/public/osds/unixODBC/lib -lclntsh /Software/oracle/app/product/11.2.0/lib/libunls11.a -ldl -lodbcinst /Software/oracle/app/product/11.2.0/lib/libcore11.a -ldl
L’argument -64
indique bien une compilation en 64 bits de la librairie
libsqora.so.11.1
, par ailleurs le "linking" est réalisée avec la librairie
odbcinst
. Cette librairie est fournie par unixODBC, c’est pourquoi la variable
LD_LIBRARY_PATH
référence /Software/tools/unixodbc/lib
. Si la librairie
odbcinst
n’est pas trouvée :
ld: fatal: library -lodbcinst: not found
ld: fatal: File processing errors. No output written to
/Software/oracle/app/product/11.2.0/odbc/lib/libsqora.so.11.1
*** Error code 1
make: Fatal error: Command failed for target
`/Software/oracle/app/product/11.2.0/odbc/lib/libsqora.so.11.1'
C’est exactement ce qui s’est produit lors de l’installation, unixODBC n’existant pas.
Installation de la librairie ODBC native Oracle libsqora.so.11.1
La commande file
indique bien qu’il s’agit d’une librairie dynamique en 64
bits :
% cd $ORACLE_HOME/odbc/lib % file libsqora.so.11.1
libsqora.so.11.1: ELF 64-bit LSB dynamic lib AMD64 Version 1, dynamically linked, not stripped, no debugging information available
Elle doit être ensuite installée dans le répertoire $ORACLE_HOME/lib
.
cp -f libsqora.so.11.1 $ORACLE_HOME/lib
Vérifier à cette étape les permissions sur la librairie libsqora.so.11.1
,
elle doit être en lecture pour tout le monde (user, group, other).
La commande ldd
indique bien que cette librairie libsqora.so.11.1
est
dépendante de la librairie unixODBC libodbcinst.so.1
:
% ldd libsqora.so.11.1
... libm.so.2 => /lib/64/libm.so.2 libclntsh.so.11.1 => ./libclntsh.so.11.1 libodbcinst.so.1 => /Software/tools/unixodbc/lib/libodbcinst.so.1 libmp.so.2 => /lib/64/libmp.so.2 ...
Test d’utilisation du pilote ODBC Oracle 11g avec unixODBC
Pour tester le pilote ODBC Oracle 11g avec unixODBC : Oracle 11g R2, utilisation du pilote ODBC avec unixODBC 2.3.0 sous Sun Solaris 10 X86