Vous avez besoin d’utiliser Oracle comme bac-à-sable sur votre machine, pour apprendre, ou expérimenter, sans dépenser de grosses sommes d’argent, alors la solution de facilité est de passer par une image Docker reprenant la base de données Oracle en version Express Edition.


Partager l’article Oracle Database Express Edition avec Docker sur les réseaux sociaux


Pourquoi passer par Docker

Oracle Express Edition (ou xe de son petit nom) est disponible gratuitement, mais son installation simple, sous linux, nécessite d’être sur une distribution compatible RedHat comme CentOS ou sans surprise Oracle Linux (OL), la distribution proposée par Oracle. Si vous êtes sous une autre distribution, l’installation devient compliquée. Ce n’est vraiment pas très fair-play de la part d’Oracle, quand on compare avec Microsoft SQL Server Developer qui peut s’installer très facilement sur différentes distributions Linux.

Bref.

Si comme moi, vous utilisez une distribution Ubuntu, par chance, une image Docker très pratique permet l’utilisation d’Oracle XE dans un conteneur, et en plus, la prise en main est aisée.

Installation

Pour ce qui suit, je me base sur une Ubuntu 20.04 LTS et sur Oracle Database XE 21c.

Je passe les détails sur l’installation de Docker sur votre système, un article de Digital Ocean l’explique très bien.

L’image Docker qui nous intéresse ici est celle de gvenzl/oracle-xe, disponible sur Docker Hub.

Récupérez cette image ainsi :

docker pull gvenzl/oracle-xe

Vous aurez alors la dernière version disponible. Au moment d’écrire ces lignes, il s’agissait d’Oracle Database 21c. Si vous souhaitez installer une autre version, utilisez le système des tags de Docker. Par exemple, pour avoir la version 11g2, faites ainsi :

docker pull gvenzl/oracle-xe:11.2.0.2

Lancement

Maintenant que nous avons l’image, préparons un peu le terrain pour avoir une persistance des données : ce serait bien de pouvoir les conserver d’une fois sur l’autre non ?

Qui dit persistance, dit volume : pour cela, créons un volume Docker et appelons-le volora en tapant la commande suivante :

docker volume create volora

Vous avez maintenant un volume pour garder vos modifications en base de données.

Définissons maintenant un mot de passe pour les utilisateurs SYS et SYSTEM ainsi que pour un utilisateur normal, arbitrairement dénommé TEST :

  • Pour SYS et SYSTEM, pour l’exemple, choisissons oracle comme mot de passe.
  • Pour l’utilisateur normal, son nom sera TEST et son mot de passe sera elcaro.

Il va de soi qu’il vous faudra choisir des mots de passe plus robustes.

Nous avons l’image, les mots de passe, le volume, il n’y a plus qu’à mettre tout ça ensemble ! Lançons Docker ainsi, en nommant notre container oracle_xe :

docker run -d -p 1521:1521 \
    --name=oracle_xe \
    -e ORACLE_PASSWORD=oracle \
    -e APP_USER=TEST \
    -e APP_USER_PASSWORD=elcaro \
    -v volora:/opt/oracle/oradata \
    gvenzl/oracle-xe

Si vous avez un problème de droit, utilisez sudo devant la commande.

Notez bien le chemin associé au volume : il correspond à celui des versions d’Oracle postérieure à 11g2. Si vous avez spécifié un tag pour installer l’image Docker pour Oracle XE 11g2, alors la commande sera la suivante :

docker run -d -p 1521:1521 \
    --name=oracle_xe \
    -e ORACLE_PASSWORD=oracle \
    -e APP_USER=TEST \
    -e APP_USER_PASSWORD=elcaro \
    -v volora:/u01/app/oracle/oradata \
    gvenzl/oracle-xe

Le chemin change de /opt/oracle/oradata à /u01/app/oracle/oradata.

Par défaut, le service name est défini à XEPDB1.

Utilisation

Testons maintenant la connexion à la base avec SQLcl et avec DBeaver.

SQLcl

Testons la connexion avec l’utilisateur TEST :

sqlcl TEST/elcaro@localhost:1521/XEPDB1

On se connecte bien comme le montre la capture suivante :

Première ouverture de session pour l’utilisateur TEST

Testons la création d’une table :

CREATE TABLE THING (
	NAME VARCHAR2 ( 100 ) NOT NULL,
	CREATED_AT DATE DEFAULT SYSDATE NOT NULL  
);

Et insérons-y une donnée :

INSERT INTO THING (NAME) VALUES ('Foo');

Tout se déroule bien comme le montre la capture suivante :

L’utilisateur TEST crée une table sous Oracle avec SQLcl

Une sélection de la table le confirme :

L’utilisateur TEST sélectionne le contenu de la nouvelle table sous Oracle avec SQLcl

Bien.

Maintenant, arrêtons notre conteneur Docker, et relançons-le, pour vérifier la persistance des données :

docker stop oracle_xe
docker start oracle_xe

En se reconnectant et en effectuant le SELECT à nouveau, on a bien la table qui est toujours présente et avec du contenu :

L’utilisateur TEST sélectionne le contenu de la nouvelle table sous Oracle avec SQLcl après redémarrage du conteneur

Il reste un petit test à faire : quid de l’utilisateur SYSTEM ? Peut-il bien se connecter ? Réponse :

L’utilisateur SYSTEM tente sa première connexion sous Oracle avec SQLcl

Verdict : tout fonctionne.

DBeaver

Pour ajouter la connexion à DBeaver, assurer vous d’avoir les données au bon endroit, comme sur la capture suivante :

Écran de configuration DBeaverde la connexion sur Oracle Database avec l’utilisateur TEST

Une fois la connexion créée, vous aurez remarqué que ce qui a été fait avant est bel et bien présent.

Écran de requête sur Oracle Database avec l’utilisateur TEST sous DBeaver

Conclusion

Si vous n’êtes pas sur une distribution linux RHEL like, alors l’utilisation d’un conteneur Docker est une franche bonne idée pour travailler avec Oracle Database XE. Facile et rapide, c’est l’idéal.

Photo de Aron Yigin sur Unsplash