Préparé par : Otmanesabiri
Date : 17 Mars 2025
Login : Otmanesabiri
Ce document décrit les étapes suivies pour l'installation d'Oracle Database 21c XE à l'aide de Docker, ainsi que les différentes commandes utilisées pour la gestion de l'instance et la consultation du dictionnaire des données. Toutes les commandes ont été exécutées sur une machine locale avec Docker.
# Vérifier si Docker est installé et sa version
docker --version
# Vérifier l'état du service Docker
systemctl status docker
# Vérifier les droits utilisateur sur Docker
groups | grep docker# Télécharger l'image Oracle Database 21c XE
docker pull gvenzl/oracle-xe:21
# Vérifier si l'image est disponible localement
docker images | grep oracle-xe# Créer et démarrer le conteneur Oracle 21c
docker run -d \
--name glsid2025 \
--restart=unless-stopped \
-p 1521:1521 \
-p 5500:5500 \
-e ORACLE_PASSWORD=Glsid2024-2025 \
gvenzl/oracle-xe:21
# Vérifier le démarrage
docker logs -f glsid2025# Accéder au conteneur
docker exec -it glsid2025 bash
# Explorer les répertoires
ls -la /opt/oracle
ls -la /opt/oracle/oradata
ls -la /opt/oracle/product# Connecter à SQL*Plus en tant que SYS
docker exec -it glsid2025 sqlplus / as sysdba
# Une fois connecté à SQL*Plus, exécutez :
ALTER USER SYS IDENTIFIED BY "Glsid2024-2025";
#vérification les utilisateurs existants et leur statut
SELECT username, account_status FROM dba_users ORDER BY username;
# Exécuter les requêtes suivantes
SELECT distinct sid FROM v$mystat;
SELECT * FROM global_name;
SELECT instance FROM v$thread;# Dans le conteneur
docker exec -it glsid2025 bash -c "ps -ef | grep oracle"
# Vérifier les processus en cours d'exécution
SELECT spid, program FROM v$process;
EOF
# Afficher les noms et descriptions des processus en arrière-plan
SELECT name, description FROM v$bgprocess WHERE paddr != '00';
# Afficher l'état de l'instance
SELECT instance_name, status FROM v$instance;
# Afficher les utilisateurs connectés
SELECT username, sid, serial# FROM v$session;# Vérifier que le port 5500 est accessible
curl -I http://localhost:5500/em
# Ouvrir dans un navigateur
echo "Ouvrir http://localhost:5500/em dans votre navigateur"
echo "Utilisateur: sys"
echo "Mot de passe: Glsid2024-2025"
echo "Connexion en tant que: sysdba"notez qu'il faut HTTP activé dans la base de donnée oracle crée cela ça va marcher avec EM DataBase Express Edition
# Vérifier l'état du listener
docker exec -it glsid2025 lsnrctl status
# Arrêter le listener (pour démontrer la commande)
docker exec -it glsid2025 lsnrctl stop
# Démarrer le listener
docker exec -it glsid2025 lsnrctl startdocker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SELECT name, db_unique_name, open_mode FROM v\$database;
EXIT;
EOF# Arrêter d'abord l'instance pour démontrer le redémarrage
docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SHUTDOWN IMMEDIATE;
STARTUP;
EXIT;
EOFdocker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdbac'est d'utiliser SqlDevelopper en le téléchargant via le site d'oracle.
# Télécharger SqlDevelopper
unzip ~/Téléchargements/sqldeveloper-24.3.1.347.1826-no-jre -d ~/
# Entrez dans le répertoire de SQL Developer
cd ~/sqldeveloper
# rendre executable le fichier sqldeveloper.sh
chmod +x sqldeveloper.sh
# lancer sqldeveloper.sh
./sqldeveloper.shAprès l'installation et exécution on se connect, pour mon cas je connecte avec les cordonnées suivantes:
Connection Name: GLSID2025
Connection Type: Basic
Username: sys
Password: Glsid2024-2025
Role: SYSDBA
Hostname: localhost
Port: 1521
Service name: XE (or try xepdb1 for the pluggable database)Note : assurer que base de donnée est démarée
docker exec -it glsid2025 /bin/bash
sqlplus / as sysdba-- If not OPEN, start the database STARTUP;
CREATE TABLE students (
student_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
enrollment_date DATE
);
INSERT ALL
INTO students (student_id, first_name, last_name, enrollment_date)
VALUES (1, 'Mohammed', 'Alaoui', TO_DATE('2024-09-01', 'YYYY-MM-DD'))
INTO students (student_id, first_name, last_name, enrollment_date)
VALUES (2, 'Fatima', 'Benali', TO_DATE('2024-09-01', 'YYYY-MM-DD'))
INTO students (student_id, first_name, last_name, enrollment_date)
VALUES (3, 'Ahmed', 'Khatib', TO_DATE('2023-09-15', 'YYYY-MM-DD'))
INTO students (student_id, first_name, last_name, enrollment_date)
VALUES (4, 'Leila', 'Tahiri', TO_DATE('2024-01-10', 'YYYY-MM-DD'))
INTO students (student_id, first_name, last_name, enrollment_date)
VALUES (5, 'Omar', 'Bennani', TO_DATE('2023-09-15', 'YYYY-MM-DD'))
SELECT * FROM dual;
-- Alternative approach: Individual inserts
INSERT INTO students (student_id, first_name, last_name, enrollment_date)
VALUES (6, 'Samira', 'El Mansouri', TO_DATE('2024-02-20', 'YYYY-MM-DD'));
-- Verify the inserted data
SELECT * FROM students ORDER BY student_id;
-- Commit the changes to save them permanently
COMMIT;docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
SELECT open_mode FROM v\$database;
-- Rétablir en lecture/écriture
SHUTDOWN IMMEDIATE;
STARTUP;
SELECT open_mode FROM v\$database;
EXIT;
EOFdocker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SELECT username, account_status FROM dba_users ORDER BY username;
EXIT;
EOFqlq utilisateur qui sont OPEN
docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba -- Vérifier si HR existe
SELECT username, account_status FROM dba_users WHERE username = 'HR';
-- S'il existe mais est verrouillé, l'activer
ALTER USER HR IDENTIFIED BY "Hr2024" ACCOUNT UNLOCK;
-- Si HR n'existe pas, le créer (dans Oracle 21c XE sur Docker)
CREATE USER hr IDENTIFIED BY "Hr2024";
GRANT CONNECT, RESOURCE TO hr;
GRANT CREATE VIEW TO hr;
GRANT UNLIMITED TABLESPACE TO hr;
EXIT;docker exec -it glsid2025 /bin/bash
sqlplus / as sysdba
puis
-- This is the correct syntax for querying v$ tables
SELECT name, value FROM v$parameter WHERE name = 'spfile';
-- Check database status
SELECT status FROM v$instance;
-- Check if all PDBs are open
SELECT name, open_mode FROM v$pdbs;
-- Check service names
SELECT value FROM v$parameter WHERE name = 'service_names';
-- Register database with listener
ALTER SYSTEM REGISTER;docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba
SELECT tablespace_name, status FROM dba_tablespaces;
SELECT file_name, tablespace_name, bytes/1024/1024 "Size (MB)" FROM dba_data_files;
EXIT;docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba
SELECT group#, member FROM v$logfile;
EXIT;docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba
SELECT name FROM v$controlfile;
EXIT;docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba
SHOW PARAMETER diagnostic_dest;
SELECT name, value FROM v$diag_info;
EXIT;docker exec -it glsid2025 lsnrctl stop# NORMAL
docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SHUTDOWN NORMAL;
STARTUP;
EXIT;
EOF
# TRANSACTIONAL
docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SHUTDOWN TRANSACTIONAL;
STARTUP;
EXIT;
EOF
# IMMEDIATE
docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SHUTDOWN IMMEDIATE;
STARTUP;
EXIT;
EOF
# ABORT
docker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba << EOF
SHUTDOWN ABORT;
STARTUP;
EXIT;
EOFdocker exec -it glsid2025 sqlplus sys/Glsid2024-2025@XE as sysdba -- 2. Views with ALL_ prefix (all accessible objects)
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OBJECT_NAME LIKE 'ALL_%' AND ROWNUM <= 20
ORDER BY OWNER, OBJECT_NAME;--3. Views with USER_ prefix (current user's objects)
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
WHERE OBJECT_NAME LIKE 'USER_%' AND ROWNUM <= 20
ORDER BY OBJECT_NAME;--4. Public synonyms
SELECT OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME
FROM ALL_SYNONYMS
WHERE OWNER = 'PUBLIC' AND ROWNUM <= 20;--5. Data dictionary cache
SELECT * FROM DICTIONARY WHERE TABLE_NAME LIKE '%CACHE%';--6. Background processes
-- First, let's see the structure of the view
DESC V$BGPROCESS;
SELECT * FROM V$BGPROCESS WHERE ROWNUM <= 10;-- 7. Instance information
SELECT instance_name, version, host_name, status FROM V$INSTANCE;--8. Database information
SELECT name, created, log_mode, open_mode FROM V$DATABASE;-- 9. Database parameters
COLUMN NAME FORMAT A30
COLUMN VALUE FORMAT A50
SELECT name, value FROM V$PARAMETER WHERE ROWNUM <= 20;-- 10. Control file locations
SELECT name FROM V$CONTROLFILE;--11. Redo log file locations
COLUMN MEMBER FORMAT A50
COLUMN STATUS FORMAT A10
SELECT GROUP#, MEMBER, STATUS FROM V$LOGFILE;
-- 12. Tablespaces
DES V$TABLESPACE;
-- 13. Datafile information
COLUMN NAME FORMAT A50
SELECT name, block_size FROM V$DATAFILE;-- 14. Tablespace-datafile mapping
COLUMN DATAFILE_NAME FORMAT A45
COLUMN TABLESPACE_NAME FORMAT A20
SELECT d.name AS datafile_name, t.name AS tablespace_name
FROM V$DATAFILE d
JOIN V$TABLESPACE t ON d.ts# = t.ts#;-- 15. PDB information (for multitenant architecture)
SELECT name, open_mode, restricted FROM V$PDBS;
EXIT;Ce TP a permis de découvrir et de valider les différentes étapes nécessaires pour installer et configurer une base de données Oracle 21c XE à l'aide de Docker, ainsi que pour gérer l'instance et consulter le dictionnaire des données. Les commandes et captures d'écran fournies dans ce document démontrent la réalisation des tâches demandées.














































