Interroger, traiter et assurer la maintenance des bases de données
Jour 7 - Sauvegardes des bases de données et modification des bases de données
# Objectifs du jour
Modification du Mindmap
Correction de l'exercice des index (Exercice 4.2)
Présentations des sauvegardes de base de données
Exercice sur les sauvegardes
Modification et migration d'un schéma
Exercice relatif à la modification d'un schéma
# Mindmap
Exercice 4.2
Adaptation du MPD pour optimiser les performances avec les index
# Commandes SQL
# Sauvegardes des bases de données
Pourquoi faire des sauvegardes ?
Vous aussi ça vous donne envie de jouer ?
# Sauvegardes des bases de données
Une sauvegarde non testée = une sauvegarde inutile
# Sauvegardes des bases de données
# Sauvegardes des bases de données
Les données (DATA)
La structure de la BDD (METADATA)
Autres
# Sauvegardes des bases de données
Locale : sauvegarde sur le serveur ou un disque externe, clé USB > rapide et facile mais à risque
Complète : toute la base, tout le schéma
Partielle : un ou plusieurs schémas, tables
Incrémentale (avec RMAN) : uniquement les blocs modifiés
Distante : sur un serveur ou cloud, plus sûr
# Sauvegardes des bases de données
1 copie originale (celle en production, utilisée tous les jours)
2 copies de sauvegarde (dump Oracle, copie système, etc.)
Exemples : Disque local + NAS / Clé USB + cloud / SSD interne + disque dur externe
Si un support tombe en panne, il reste une autre technologie indépendante
# Sauvegardes des bases de données
Emplacement différent physiquement du système principal
Exemple :
Pourquoi ?
# Sauvegardes des bases de données
Attention notamment au ransomware :
Automatiser sans synchroniser, gérer les versions ou en lecture seule pour ne pas que les sauvegardes soit également affectés
Les bonnes pratiques restent valables : Tester les sauvegardes (régulièrement), avoir une procédure, etc.
# Sauvegardes des bases de données
Aspect | expdp / impdp | RMAN (Recovery Manager) |
---|---|---|
🔍 Type de sauvegarde | Logique (objets, données, métadonnées SQL) | Physique (blocs disque de la base Oracle) |
🧠 Ce qui est sauvegardé | Tables, vues, schémas, procédures, données | Fichiers de données (.dbf), control file, redo logs |
🎯 Usage principal | Migration, duplication, tests, export partiel | Restauration intégrale après crash (niveau bas) |
💾 Format | Fichier .dmp (lisible uniquement par Oracle) | Fichiers binaires internes Oracle |
🔄 Restauration partielle | ✅ Oui (table, schéma, données spécifiques) | ❌ Non (base complète ou tablespace uniquement) |
🛡️ Protection contre crash | ❌ Non, pas suffisant seul | ✅ Oui, complet + gestion des journaux |
🔧 Facilité d’utilisation | Simple pour dev/test, scriptable | Plus complexe, réservé à la prod ou aux DBA |
# Sauvegardes des bases de données
Quand expdp/impdp
suffit :
Quand RMAN est nécessaire :
# Sauvegardes des bases de données
Commande pour export :
Commande pour import :
expdp system/manager@xepdb1 SCHEMAS=magasin DIRECTORY=EXPORT_DIR DUMPFILE=magasin.dmp LOGFILE=export_magasin.log
impdp system/manager@xepdb1 SCHEMAS=magasin DIRECTORY=EXPORT_DIR DUMPFILE=magasin.dmp LOGFILE=magasin_import.log
Commande pour export :
Commande pour import :
expdp system/manager@xepdb1 FULL=Y DIRECTORY=EXPORT_DIR DUMPFILE=full_db.dmp LOGFILE=full.log
impdp system/manager@xepdb1 FULL=Y DIRECTORY=EXPORT_DIR DUMPFILE=full.dmp LOGFILE=magasin_import.log
# Sauvegardes des bases de données
Commande pour import :
impdp magasin/magasin@xepdb1 TABLES=magasin.produits,magasin.commandes DIRECTORY=EXPORT_DIR DUMPFILE=magasin.dmp LOGFILE=import_tables.log
Commande pour import de la structure uniquement :
impdp magasin/magasin@xepdb1 TABLES=produits DIRECTORY=EXPORT_DIR DUMPFILE=magasin.dmp LOGFILE=import_ddl_only.log CONTENT=METADATA_ONLY
Commande pour import des données uniquement :
impdp magasin/magasin@xepdb1 TABLES=produits DIRECTORY=EXPORT_DIR DUMPFILE=magasin.dmp LOGFILE=import_ddl_only.log CONTENT=DATA_ONLY
# Sauvegardes des bases de données
Généralement, les sauvegardes sont automatisées.
Voici le processus pour le faire automatiquement avec expdp :
#!/bin/bash
# === Config personnalisable ===
ORACLE_USER="system"
ORACLE_PASS="manager"
ORACLE_SVC="xepdb1"
EXPORT_DIR="EXPORT_DIR"
DUMP_PATH="/opt/exports"
RETENTION_DAYS=7
# === Générer timestamp ===
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DUMPFILE="full_export_${TIMESTAMP}.dmp"
LOGFILE="full_export_${TIMESTAMP}.log"
# === Lancer l'export FULL ===
expdp ${ORACLE_USER}/${ORACLE_PASS}@${ORACLE_SVC} \
FULL=Y \
DIRECTORY=${EXPORT_DIR} \
DUMPFILE=${DUMPFILE} \
LOGFILE=${LOGFILE}
# === Nettoyage des vieux dumps ===
find "${DUMP_PATH}" -type f -name "full_export_*.dmp" -mtime +${RETENTION_DAYS} -exec rm -f {} \;
find "${DUMP_PATH}" -type f -name "full_export_*.log" -mtime +${RETENTION_DAYS} -exec rm -f {} \;
Création d'un script qui utilise la commande expdb :
Exécuter le script automatiquement via cron ou planificateur Windows
crontab -e 0 2 * * * /opt/scripts/oracle_full_export.sh
# Sauvegardes des bases de données
Exercice 5.1
Exercice de sauvegarde et restauration
# Modification d'un schéma de BDD
# Modification d'un schéma de BDD
# Modification d'un schéma de BDD
ALTER TABLE produits ADD nbr_stock_pro INT;
Exemple de add column pour ajouter le nombre de produits en stock :
ALTER TABLE produits DROP COLUMN description_pro;
Exemple pour supprimer la colonne description :
ALTER TABLE produits MODIFY nom_pro VARCHAR(255);
Modifier la colonne nom pour augmenter la longueur à 255 caractères
ALTER TABLE produits
{...}
Suivi des modifications souhaitées (voir points ci-dessous)
# Modification d'un schéma de BDD
ALTER TABLE produits RENAME COLUMN nom_pro TO appelation_pro;
Renommer nom_pro en appelation_pro :
ALTER TABLE clients ADD CONSTRAINT ct_nn_email_cli CHECK (email_cli IS NOT NULL);
Ajouter une contrainte non null sur l'email dans la table clients :
Copier une table et ses données :
Copier les données d'une table dans une autre :
CREATE TABLE produits_test AS SELECT * FROM produits;
INSERT INTO produits_test SELECT * FROM produits;
-- OU seulement certains champs
INSERT INTO produits_test (id_produit, nom, prix, id_categorie)
SELECT id_produit, nom, prix, id_categorie FROM produits;
# Modification d'un schéma de BDD
Faire une sauvegarde : Avant toute opération de type ALTER TABLE
, exporter la table ou la base
Vérifier les contraintes (notamment de clés étrangères) : Modifier ou supprimer une colonne liée à contrainte peut causer une erreur SQL ou casser une relation
Impact sur les applications connectées : Un champ renommé ou supprimé peut casser une application qui l’utilise
Communication avec les développeurs ou tests de validation indispensables
# Modification d'un schéma de BDD
Modifications destructrices (avec pertes de données)
Diminuer la taille d’un champ : Tronque le champ ou provoque une erreur (c'est le cas en oracle)
Changement de type : Oracle peut lever une erreur de conversion si le contenu ne correspond pas
Suppression de colonne : Suppression immédiate et irréversible dans Oracle
# Modification d'un schéma de BDD
Tester l'intégrité : Même nombre de lignes, aucune erreur, etc.
Documenter les changements
Tester les applications, communiquer avec les développeurs
# Sauvegardes des bases de données
Exercice 6.1
Modification de la base de données
Merci de votre attention 😊
Bonne fin de journée !