Dans cette série d’articles on va voir comment on peut interagir avec Oracle en utilisant le doux langage C :).
Dans cette première partie on va mettre en place notre environnement de développement en installant les différents composants nécessaires a un poste client Ubuntu 12.10 (32 bits) pour accéder a un serveur Oracle (Je note au passage que Oracle au contraire d’autres éditeurs que nous verrons par la suite, mets a disposition des développeurs Linux 32 et 64 bits tous les outils nécessaires pour développer des applications Oracle sous Linux).
Commencer par récupérer tout ce qu’il faut a partir d’ici :
Oracle distribue les packages dont nous avons besoin sous forme de RPMs, on aura donc besoin d’installer alien qui permet de passer d’un RPM a un package deb.
Les packages a télécharger sont :
– oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm
– oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm
– oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm
– oracle-instantclient11.2-precomp-11.2.0.3.0-1.i386.rpm.
Une fois qu’on a tout ça, on commence les installs :
sudo apt-get install alien sudo alien -k oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm sudo dpkg -i oracle-instantclient11.2-basic_11.2.0.3.0-1_i386.deb sudo alien -k oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm sudo dpkg -i oracle-instantclient11.2-devel_11.2.0.3.0-1_i386.deb sudo alien -k oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm sudo dpkg -i oracle-instantclient11.2-sqlplus_11.2.0.3.0-1_i386.deb sudo alien -k oracle-instantclient11.2-precomp-11.2.0.3.0-1.i386.rpm sudo dpkg -i oracle-instantclient11.2-precomp_11.2.0.3.0-1_i386.deb
Vous pouvez ensuite ajouter ces lignes dans le fichier ~/.bashrc :
export ORACLE_HOME=/usr/lib/oracle/11.2/client export LD_LIBRARY_PATH=$ORACLE_HOME/lib export TNS_ADMIN=/usr/lib/oracle/11.2/client/network/admin
On crée ensuite le fichier de connexion a notre serveur tnsnames.ora (les commandes suivantes nécessitent les droits sudo):
cd $ORACLE_HOME mkdir -p network/admin cd $ORACLE_HOME/network/admin
Ajouter ensuite dans tnsnames.ora les lignes qui correspondent a votre serveur, pour moi ca ressemble a ça :
TOCORACL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = tcoServer)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = TOCORACL) ) )
tcoServer = nom du serveur Oracle, vous pouvez aussi mettre une adresse IP
SERVICE_NAME = nom du service coté serveur (vous pouvez le récupérer coté serveur avec la commande : lsnrctl status).
Pour avoir des traces et des logs des connexions Oracle coté client, on crée les répertoires qui vont bien (n’oubliez pas de passer par sudo ou root) :
cd $ORACLE_HOME mkdir -p log/diag/clients cd log/diag chmod 777 clients
Les logs pour chaque user seront dans le répertoire : /usr/lib/oracle/11.2/client/log/diag/clients/user_VotreLogin/host_xxxxxx/trace.
On peut maintenant tester la connectivité avec la commande sqlplus :
sqlplus hr/human@TOCORACL # Ici on veut se connecter au service "TOCORACL" (voir tnsnames.ora) avec le user "hr" et le mot de passe "human"
A ce stade si tout se passe bien, on aura le prompt de sqlplus et on peut faire des requêtes en base, par exemple lister les tables :
toc@tocNewServer:/usr/lib/oracle/11.2/client/log/diag/clients/user_toc/host_607040588_80/trace$ sqlplus hr/human@TOCORACL SQL*Plus: Release 11.2.0.3.0 Production on Fri Jun 14 20:44:35 2013 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select OBJECT_NAME from user_objects where OBJECT_TYPE = 'TABLE'; OBJECT_NAME -------------------------------------------------------------------------------- COUNTRIES DEPARTMENTS EMPLOYEES JOBS JOB_HISTORY LOCATIONS REGIONS 7 rows selected. SQL>
La prochaine fois on verra comment utiliser le PRO*C pour faire des requêtes dans une base Oracle.