DBAtlas · Atlas d'exploitation des bases de données

Oracle Data Pump : export / import, migration, rafraîchissement de schéma et transportable

OracleNiveau: IntermédiaireDurée: 30–90 min (selon le volume de données)

Export et import de table, de schéma, de tablespace ou complet avec expdp/impdp, migration entre deux bases (fichier dump + scp + checksum, ou NETWORK_LINK) et extraction du DDL d'un dump (SQLFILE). Comprend la préparation du directory, de l'utilisateur et du parfile, la cohérence, le parallélisme, le remapping, la surveillance et le nettoyage des jobs interrompus. Sur RAC : connexion SCAN + service, CLUSTER=YES avec un directory partagé ou CLUSTER=NO avec un disque local ; en option, planification de l'export avec un script utilisant un wallet et /etc/cron.d. Scénarios : rafraîchissement de schéma de la production vers le test (DROP USER … CASCADE ou TABLE_EXISTS_ACTION=REPLACE, conservation du mot de passe/profil et des privilèges), transportable tablespace (même plateforme ou plateforme et endian différents, RMAN CONVERT), full transportable (11g/12c → PDB 19c), chiffrement et compression du dump, performances pour les grosses migrations et gestion d'un job interrompu avec ATTACH/START_JOB/KILL_JOB.

Topologie: 1 base de données (instance unique, Oracle Restart ou RAC) ; source + cible pour une migration

Scénarios

  • Export : produire un fichier dump à partir de la base — Une table, un schéma, un tablespace ou toute la base est écrit dans un fichier dump (expdp). La base reste ouverte et l'application continue de fonctionner. Il s'agit d'une copie logique : elle ne remplace pas une sauvegarde RMAN (la restauration à un point dans le temps et la récupération complète exigent RMAN).
  • Import : charger un fichier dump dans la base — Un fichier dump déjà produit est chargé avec impdp ; les noms de schéma, de tablespace et de table peuvent être remappés. La cible reste ouverte ; l'application qui utilise les objets chargés doit être arrêtée.
  • Migration : transférer les données de la base source vers la cible — Export → copie de fichiers → import, ou directement avec NETWORK_LINK sans fichier dump. Choisissez cette carte si le schéma n'existe pas encore sur la cible (chargement initial) ; si le même schéma existe déjà sur la cible et doit être remplacé par celui de la production, choisissez la carte « Rafraîchissement de schéma ». La source reste ouverte.
  • Extraire uniquement le DDL d'un fichier dump (SQLFILE) — Rien n'est chargé ; les ordres CREATE des objets sont écrits dans un fichier .sql. La base n'est pas modifiée.
  • Rafraîchissement de schéma de la production vers le test (refresh) — Un schéma qui existe déjà en test/UAT est remplacé par sa version actuelle de production : sauvegarde du schéma cible, fermeture des sessions, DROP USER … CASCADE ou TABLE_EXISTS_ACTION=REPLACE, conservation du mot de passe/profil et des privilèges. La source reste ouverte ; le schéma cible est indisponible pendant toute l'opération.
  • Déplacer un tablespace en copiant les datafiles (transportable tablespace) — Les gros tablespaces (plusieurs centaines de Go et plus) sont déplacés en copiant les datafiles et non ligne par ligne ; plateforme/endian identique ou différent (RMAN CONVERT). Les jeux de caractères doivent être identiques des deux côtés. Sur la source, les tablespaces sont en READ ONLY pendant toute l'opération (interruption des écritures).
  • Déplacer toute la base : full transportable (11g/12c → 19c, non-CDB → PDB) — Avec FULL=Y TRANSPORTABLE=ALWAYS, les tablespaces utilisateur sont déplacés vers une nouvelle PDB sous forme de datafiles, et tout le reste (utilisateurs, PL/SQL, privilèges) sous forme de métadonnées ; VERSION=12 sur une source 11.2.0.3+. Sur la source, tous les tablespaces utilisateur sont en READ ONLY pendant toute l'opération.
  • Job Data Pump interrompu / suspendu : surveiller, reprendre, arrêter — Un job expdp/impdp est suspendu (resumable wait), arrêté ou interrompu ; vous voulez vous y rattacher avec ATTACH et le reprendre, le terminer avec KILL_JOB ou nettoyer une master table orpheline. La base reste ouverte.

Avant de commencer

  • Les commandes s'exécutent sur le serveur de base de données avec l'utilisateur oracle ; le profil de connexion de cet utilisateur définit les variables ORACLE_HOME, ORACLE_SID et PATH, et expdp/impdp sont dans le PATH. expdp, impdp et sqlplus se trouvent sous $ORACLE_HOME/bin ; si ce répertoire n'est pas dans le PATH, vous obtenez bash: expdp: command not found (. oraenv ou le chemin complet : $ORACLE_HOME/bin/expdp).… Sur RAC, ORACLE_SID sur chaque nœud est le nom d'instance de ce nœud (par ex. …………… sur le nœud 1).…
  • Base de données 12.2 ou ultérieure (19c, 21c, 23ai). Les paramètres LOGTIME, ENCRYPTION_PWD_PROMPT et DISABLE_ARCHIVE_LOGGING utilisés dans ce guide sont apparus en 12c. La liste des paramètres diffère en 10g/11g ; les fichiers .dmp d'Oracle 9i et antérieurs ne s'ouvrent qu'avec l'ancien imp.… Full transportable : l'export est pris en charge à partir de 11.2.0.3 (avec VERSION=12 en 11g), l'import à partir de 12.1 ; 11g n'a pas LOGTIME/METRICS, le guide ne les utilise donc pas dans ce cas.…
  • Le listener fonctionne et le service … est enregistré… ; le service … est enregistré sur la cible….
  • Le listener fonctionne sur le serveur cible et le service … est enregistré.
  • L'espace libre est suffisant pour …… (source) et … (cible)… : pour l'export, autant que la taille estimée (généralement 3 à 5 fois moins avec COMPRESSION=ALL) ; pour l'import, les fichiers dump doivent déjà se trouver dans ce répertoire. Le répertoire ne doit pas être sur le même disque que les datafiles et la FRA.
  • Pour éviter ORA-01555 pendant un long export cohérent (FLASHBACK_TIME/SCN), UNDO_RETENTION est supérieur à la durée de l'export (par ex. au moins 10800 s pour un export de 3 heures) et le tablespace undo est assez grand pour cette durée (autoextend).
  • L'import génère beaucoup de redo : si la base est en mode ARCHIVELOG, il faut de la place dans la FRA (ou la destination d'archivage). DISABLE_ARCHIVE_LOGGING est sans effet quand FORCE LOGGING est activé (Data Guard).
  • La base cible dispose d'une sauvegarde RMAN récente et la méthode de retour arrière est définie (un import ne peut pas être annulé : un import dans le mauvais schéma ou avec TRUNCATE/REPLACE ne peut être défait qu'à partir d'une sauvegarde ou avec Flashback). Dans un environnement critique, un guaranteed restore point peut être créé avant l'import (ARCHIVELOG + FRA requis).
  • Une fenêtre de maintenance est planifiée : …sur la source, les tablespaces transportés sont en READ ONLY pendant l'export et la copie des datafiles (les applications qui écrivent reçoivent des erreurs, ORA-00372) ; sur la cible, les nouveaux objets ne doivent pas être utilisés pendant le plug-in…les applications qui utilisent les objets cibles doivent être arrêtées pendant l'import, ou il faut vérifier qu'elles ne sont pas affectées…aucune option de cohérence n'ayant été choisie, les écritures applicatives doivent être arrêtées pendant l'export….
  • L'utilisateur oracle de la source peut faire du SSH/SCP vers la cible sans mot de passe (par clé), ou les fichiers seront transférés autrement (stockage partagé, stockage objet).
  • Le serveur cible peut joindre le port du listener source (…:…) (pare-feu ouvert).
  • Contrôle des licences : …COMPRESSION=ALL (et DATA_ONLY) exige la licence Advanced Compression Option. ……Le chiffrement du dump (ENCRYPTION, ENCRYPTION_PASSWORD/ENCRYPTION_PWD_PROMPT) exige la licence Advanced Security Option en Enterprise Edition. …Si vous n'avez pas la licence, désactivez ces options.

Phases du guide

  • Préparation : environnement, utilisateur et directory — Vérifier l'environnement et le service du listener · Vérifier l'environnement et le service du listener (source) · Vérifier l'environnement et le service du listener (cible) · Vérifier le SCAN et les instances du service · Contrôler la version, le jeu de caractères et le mode de journalisation · Contrôler la version, le jeu de caractères et le mode de journalisation (source) …
  • 1. Diagnostic : est-ce la bonne cible ? (rafraîchissement de schéma) — Enregistrer l'état du schéma cible (cible) · Enregistrer l'état du schéma source (source)
  • 2. Filet de sécurité : sauvegarde du schéma cible et de la définition de l'utilisateur — Sauvegarder la définition et les privilèges de l'utilisateur de test (cible) · Sauvegarder le schéma cible (cible)
  • 1. Diagnostic : prérequis transportable — Contrôler la plateforme, le jeu de caractères et l'ensemble de tablespaces sur la source (source) · Contrôler la plateforme, le jeu de caractères et les conflits de noms sur la cible (cible)
  • 2. Filet de sécurité et préparation — Enregistrer la liste des datafiles et l'état READ ONLY actuel (source) · Préparer le répertoire des datafiles sur la cible (cible)
  • 3. Exécution : READ ONLY, export des métadonnées et copie sur la source — Mettre les tablespaces en READ ONLY (source) · Écrire le parfile de l'export transportable (source) · Exécuter l'export des métadonnées (source) · Copier les datafiles et le dump vers la cible (source)
  • 4. Exécution : plug-in sur la cible — Vérifier les fichiers copiés (cible) · Convertir les datafiles pour cette plateforme : RMAN CONVERT (cible) · Créer les schémas propriétaires des objets (cible) · Créer le parfile de l'import plug-in (cible) · Exécuter l'import plug-in (cible) · Rendre les tablespaces accessibles en écriture (cible)
  • 5. Vérification et suites — Exporter les objets situés hors des tablespaces (source) · Charger les objets situés hors des tablespaces (cible) · Compiler et vérifier les objets invalides (cible) · Remettre les tablespaces en READ WRITE sur la source (source)
  • Export — Examiner les gros objets, les LOB et les partitions · Estimer la taille (ESTIMATE_ONLY) · Estimer la taille (ESTIMATE_ONLY) (source) · Écrire le parfile d'export · Écrire le parfile d'export (source) · Exécuter l'export …
  • Transfert des fichiers dump vers la cible — Créer le fichier de checksums · Copier les fichiers dump vers la cible · Vérifier les checksums sur la cible
  • Database link (NETWORK_LINK) — Créer le database link sur la cible
  • 3. Exécution : vider le schéma cible — Verrouiller l'utilisateur et fermer les sessions (cible) · Supprimer le schéma et recréer l'utilisateur de test (cible) · Lister les objets qui ne seront pas mis à jour en mode REPLACE (cible)
  • Import — Contrôler les fichiers dump · Contrôler les fichiers dump (cible) · Contrôler l'espace et les schémas existants sur la cible · Contrôler l'espace et les schémas existants sur la cible (cible) · Écrire le parfile d'import · Écrire le parfile d'import (cible) …
  • Après l'import : compilation et statistiques — Compiler les objets invalides · Compiler les objets invalides (cible) · Calculer les statistiques · Calculer les statistiques (cible)
  • 4. Vérification et suites (rafraîchissement de schéma) — Désactiver les jobs scheduler venus de la production (cible) · Réappliquer les privilèges accordés par le schéma à d'autres utilisateurs (cible) · Contrôler les objets, les synonymes et les links (cible) · Déverrouiller l'utilisateur (cible)
  • SQLFILE : extraction du DDL d'un dump — Contrôler les fichiers dump · Écrire le parfile SQLFILE · Générer le fichier DDL · Examiner le fichier DDL
  • Planification : exécuter l'export régulièrement (cron) — Préparer les répertoires du script, des logs et TNS… (…)… · Créer le wallet et y ajouter l'identifiant · Copier le wallet sur les autres nœuds · Écrire sqlnet.ora (pour ce job uniquement)… (…)… · Écrire tnsnames.ora (pour ce job uniquement)… (…)… · Écrire le script d'export… (…)… …
  • 1. Diagnostic : dans quel état est le job ? — Afficher l'état du job, ses sessions et le motif d'attente · Interpréter le résultat et choisir l'action
  • 2. Exécution : reprendre le job — Corriger la cause de l'arrêt ou de la suspension · Se rattacher au job et le reprendre (ATTACH, START_JOB) · Vérifier que le job s'exécute
  • 2. Exécution : arrêter le job (KILL_JOB) — Se rattacher au job et l'arrêter avec KILL_JOB · Vérifier que le job a disparu
  • 2. Exécution : nettoyer la master table orpheline — Supprimer la master table du job orphelin
  • Surveillance — Surveiller le job en cours · Surveiller le job en cours (source) · Surveiller le job en cours (cible) · Se rattacher au job : ATTACH et commandes interactives · Se rattacher au job : ATTACH et commandes interactives (source) · Se rattacher au job : ATTACH et commandes interactives (cible)
  • Nettoyage et sécurité — Lister les jobs interrompus et les master tables · Lister les jobs interrompus et les master tables (source) · Lister les jobs interrompus et les master tables (cible) · Arrêter le job avec KILL_JOB · Arrêter le job avec KILL_JOB (source) · Arrêter le job avec KILL_JOB (cible) …
Ouvrir le plan pas à pas adapté à votre environnement →