Installer le client Oracle 12c sous Debian Jessie🔗
Introduction
Parfois, vous n'aurez pas le choix. Comme bien souvent dans une entité, une DSI prend des décisions qui ne sont pas toujours les plus avisées et ce, pour de multiples raisons.
Ainsi, il est probable qu'on vous demande des choses complexes à réaliser. Dans ces éléments du quotidien, on va par exemple vous imposer de connecter un serveur sous Debian vers une base de données Oracle.
S'il avait fallu se connecter à un serveur PostgreSQL ou MySQL, l'opération aurait été sans doute beaucoup plus facile. Car, il faut bien l'avouer, demander de connecter un OS libre à des logiciels propriétaires est souvent synonyme de galère sans nom.
L'objet de cet article est de présenter une méthode pour régler ce problème de connexion. Il vous permettra d'installer le client Oracle sous Debian 8.0 (Jessie) ainsi que l'interpréteur SQL en ligne de commande d'Oracle. Nous verrons également comment connecter un client en Python via la bibliothèque cx_Oracle.
Rappel: Oracle Database est un logiciel propriétaire qui coûte assez cher. Le support des OS GNU/Linux est assuré uniquement pour la distribution RHEL et, bien entendu, la distribution Oracle Linux. Néanmoins, il est quand même possible d'installer le client Oracle officiel dans d'autres distributions, moyennant quelques manipulations assez simples à mettre en œuvre.
Télécharger ce qu'il faut
Il vous faut:
- le client Oracle 12c nommé Instant Client.
- le SDK Oracle 12c.
- le binaire de SQLPlus, le client SQL en ligne de commande d'Oracle.
Prenez soin de prendre la version adaptée à votre architecture. Dans la pratique, si vous êtes sous ARM, c'est mort ! Seules les architectures x86 et x86_64 sont gérées !
Bien sûr, comme Oracle est une entreprise, vous aurez besoin de créer un compte (à la con) pour seulement télécharger ces archives. Donnez une adresse email jetable, ça ne vaut pas la peine de rentrer dans ce jeu (après tout, vous utilisez Oracle parce qu'on vous oblige à le faire) !
Installer l'ensemble
Voici mon approche:
- J'installe tout dans
/opt/oracle
, conformément aux règles FHS. - Il faudra ensuite modifier quelques variables d'environnement pour accéder à ce répertoire.
# apt install libaio1 # mkdir -p /opt/oracle # cd /opt/oracle # unzip /tmp/instantclient-basic-linux.x64-12.1.0.2.0.zipunzip /tmp/instantclient-basic-linux.x64-12.1.0.2.0.zip # unzip /tmp/instantclient-sdk-linux.x64-12.1.0.2.0.zip # unzip /tmp/instantclient-sqlplus-linux.x64-12.1.0.2.0.zip # cd instantclient_12_1 && ln -s libclntsh.so.12.1 libclntsh.so
Ensuite, il reste à déclarer quelques variables d'environnement pour que tout fonctionne correctement
$ export ORACLE_HOME=/opt/oracle/instantclient_12_1 $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME $ export PATH=$PATH:$ORACLE_HOME
Copiez ça dans votre .bashrc
!
# Oracle things export ORACLE_HOME=/opt/oracle/instantclient_12_1 if [ "$LD_LIBRARY_PATH" = "" ]; then export LD_LIBRARY_PATH=$ORACLE_HOME else export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME fi export PATH=$PATH:$ORACLE_HOME
Si vous avez un fichier tnsnames.ora, le fichier qui référence les connexions vers le ou les serveurs Oracle de votre environnement, vous devez le placer au bon endroit (celui par défaut), ce qui vous permettra d'économiser une variable d'environnement.
# mkdir -p /opt/oracle/instantclient_12_1/network/admin # cp /tmp/tnsnames.ora /opt/oracle/instantclient_12_1/network/admin/
Tester que tout marche
Le client est installé et configuré, il reste à tester l'ensemble. Vous devez disposer d'un vrai serveur Oracle Database pour vérifier que la connexion se déroule correctement. Pour réaliser ce test de connexion, nous allons utiliser SQLPlus (après tout, c'est le client officiel):
$ sqlplus user/password@tnsname SQL*Plus: Release 12.1.0.2.0 Production on Tue Jul 21 14:33:08 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production SQL>
Si vous avez le prompt SQL, alors ça veut dire que votre installation est fonctionnelle. Si ce n'est pas le cas, veillez à bien spécifier le tnsname tel qu'il est indiqué dans le fichier tnsnames.ora. Par exemple dans:
THESERVER.WORLD = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = sdf.my-domain.example)(PORT = 51478)) (CONNECT_DATA = (SID = theserver)) )
Le nom du tnsname est bien THESERVER.WORLD et non theserver qui correspond au SID. Le SID (Oracle System Identifier) était utilisé pour les serveurs Oracle Database d'avant la version 8.1.
Par ailleurs, le client Oracle gère le fichier tnsnames.ora de façon équivalente s'il est encodé avec des caractères de fin de ligne de MS-Windows. Vous pouvez le copier tel quel sur votre Debian et ça devrait fonctionner.
Installer cx_Oracle
Maintenant que nous disposons de tout ce qu'il faut comme binaire pour Oracle, on peut lancer la création de cx_Oracle. Je vous recommande de télécharger la source dans un répertoire puis de le compiler via les instructions standard. En effet, sous Debian, l'utilisation des distutils permet de créer les modules Python dans /usr/local/lib/python2.7/dist-packages/
.
Attention, par défaut, Debian Jessie utilise Python 2.7 !
# apt install python-dev build-essential $ cd ~/projects/oracle/ $ wget https://pypi.python.org/packages/source/c/cx_Oracle/cx_Oracle-5.1.3.tar.gz $ tar -xzf cx_Oracle-5.1.3.tar.gz $ cd cx_Oracle-5.1.3 $ python setup.py build # python setup.py install
Ensuite, un simple chargement du module cx_Oracle sous Python devrait vous confirmer que tout est correct. Si vous voulez vraiment tester une connexion vers un serveur existant, adaptez le script qui suit devrait suffire:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys import cx_Oracle connection = cx_Oracle.Connection("user/password@tnsname") cursor = connection.cursor() try: cursor.execute("select 1 / 0 from dual") except cx_Oracle.DatabaseError, exc: error, = exc.args print >> sys.stderr, "Oracle-Error-Code:", error.code print >> sys.stderr, "Oracle-Error-Message:", error.message
Conclusion
Ce document permet d'installer le client Oracle 12c sous Debian Jessie amd_64. C'est assez facile finalement et on peut facilement créer des scripts de déploiement (Puppet/Ansible et autres) ! Avec cx_Oracle, Oracle Database est également accessible à tout bon codeur Python tout en bénéficiant de l'API DB 2.0 de ce dernier, vous permettant de créer du code (quasi) indépendant du SGBDR.
Mais il faut quand même relativiser: l'installation du dernier client PostgreSQL et de la bibliothèque Python relative se réalise de la manière suivante:
# aptitude install postgresql-client python-psycopg2
C'est quand même bien plus facile, non ?
À la fin de cet article, il reste un point intéressant à étudier. En effet, si vous êtes sous Debian, pourquoi ne pas créer un ensemble de paquets permettant de déployer ces binaires grâce à dpkg (et le reste des outils permettant d'installer des paquets Debian) ? Ce sera l'objet d'un prochain article…