Importer, exporter et migrer des bases de données

Migrez les données d'une autre base de données PostgreSQL vers une base de données OCI Database with PostgreSQL.

Utilisation d'utilitaires PostgreSQL tels que pg_dump

L'utilitaire pg_dump est fourni avec une installation PostgreSQL par défaut et peut être utilisé pour extraire une base de données PostgreSQL dans un fichier de script ou un autre fichier d'archive. Ces fichiers peuvent être fournis à une base de données OCI Database with PostgreSQL avec des commandes psql ou pg_restore pour recréer une base de données dans le même état au moment de son vidage.

Lorsque vous créez une base de données OCI Database with PostgreSQL, vous indiquez un administrateur. Cet utilisateur peut effectuer une restauration à partir d'un fichier créé à l'aide de ces utilitaires. Etant donné que ces utilitaires sont des applications client PostgreSQL standard, vous pouvez effectuer cette procédure de migration à partir de n'importe quel hôte distant ayant accès à la base de données.

Remarque

Ce guide utilise pg_dump pour créer les vidages au format texte brut et l'utilitaire psql pour restaurer le vidage. Vous pouvez également créer des vidages dans un format différent et utiliser pg_restore pour les restaurer.

Exemple : Exporter et importer toutes les bases de données d'un système de base de données

L'exemple suivant suppose que le système de base de données source est un système PostgreSQL vanille, avec trois bases de données : db_1, db_2 et db_3. Le système de base de données source dispose de nombreux utilisateurs, dont certains disposent de privilèges SUPERUSER.

  1. Effectuez le vidage sur schéma uniquement de toutes les bases de données. Videz chaque base de données dans un fichier individuel avec les informations de propriété des objets des utilisateurs.

    /usr/lib/postgresql/bin/pg_dump -U psql -h <IP_of_Source_DB> -s -E 'UTF8' -d <db_1> -f <db_1_schema_dump>.sql
    • -U : utilisateur créant le fichier dump
    • -h : adresse d'hôte de la base de données source
    • -s : vidage uniquement du schéma, pas de données
    • -E : définition du codage client du fichier dump sur UTF-8
    • -d : base de données à vider
    • -f : fichier O/P pour vider le schéma de base de données

    Répétez cette opération pour les bases de données db_2 et db_3.

  2. Créez un dump des données uniquement de chacune des bases de données dans des fichiers individuels.

    /usr/lib/postgresql/bin/pg_dump -U psql -h <IP_of_Source_DB> -a -E 'UTF8' -d db_1 -f <db_1_data_dump>.sql
    • -a : vide uniquement les données, et non le schéma

    Répétez cette opération pour les bases de données db_2 et db_3.

  3. Videz les objets globaux sans informations sur le tablespace.

    /usr/lib/postgresql/bin/pg_dumpall -U psql -h <IP_of_Source_DB> -g --no-role-passwords --no-tablespaces -f <all_roles>.sql
    • -g : vide uniquement les objets globaux, aucune base de données
    • --no-role-passwords : utilisez cet indicateur pour éviter le vidage des mots de passe.
    • --no-tablespaces : OCI Database with PostgreSQL prend uniquement en charge les tablespaces "in-place".
  4. Etant donné que l'administrateur de la base de données OCI Database with PostgreSQL ne dispose pas des privilèges SUPERUSER, NOSUPERUSER, NOREPLICTION, etc., doivent être enlevés des instructions CREATE USER dans le fichier dump.

    Apportez les modifications nécessaires au fichier dump global pour supprimer toutes les commandes nécessitant des privilèges SUPERUSER. Par exemple :

    ALTER ROLE/USER test WITH NOSUPERUSER NOINHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'test';
    

    Doit être modifié en :

    ALTER ROLE/USER test WITH LOGIN PASSWORD 'test';
  5. Restaurez le vidage global à l'aide de l'administrateur OCI Database with PostgreSQL sur le système de base de données OCI Database with PostgreSQL pour créer tous les rôles/utilisateurs :

    /usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <all_roles>.sql  
  6. Restaurez les vidages de base de données de type schéma uniquement :

    /usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <db_1_schema_dump>.sql

    Répétez cette opération pour les bases de données db_2 et db_3.

    Remarque

    Corrigez les erreurs liées aux privilèges ou aux non-concordances d'objet avant de poursuivre.
  7. Restaurez les vidages de la base de données uniquement :

    /usr/lib/postgresql/bin/psql -U psql -d postgres -h <IP_of_Target_Database_System> -f <db_1_data_dump>.sql

    Répétez cette opération pour les bases de données db_2 et db_3.

  8. Vérifiez le nombre de lignes de toutes les tables dans la base de données source.
  9. Assurez-vous que tous les niveaux d'autorisation du système de base de données source sont reflétés avec précision dans OCI Database with PostgreSQL.
  10. Définissez les mots de passe des utilisateurs créés dans la base de données OCI Database with PostgreSQL.
  11. Exécutez VACUUM ANALYZE sur chaque base de données ou chaque table pour mettre à jour les statistiques des bases de données. Cette commande aide le planificateur de requêtes PostgreSQL à créer des plans de requête optimisés, ce qui améliore les performances. Pour accélérer l'exécution de VACUUM ANALYZE, nous vous recommandons d'augmenter maintenance_work_mem dans la session PSQL. VACUUM ANALYZE peut également être exécuté dans des sessions distinctes en parallèle pour réduire le temps de fin.

    SET maintenance_work_mem = '<a_few_gigabytes_depending_on_shape>';
    VACUUM ANALYZE <db_1>;

    Répétez cette opération pour les bases de données db_2 et db_3.

    Remarque

    Nous vous recommandons d'exécuter régulièrement VACUUM ANALYZE et REINDEX sur des tables et des index bloqués afin de maintenir les performances du système de base de données. Exécutez cette opération pendant les heures creuses pour éviter tout impact sur les applications.

Utilisation de GoldenGate

Vous pouvez utiliser GoldenGate pour configurer la réplication d'une base de données PostgreSQL source vers une base de données OCI Database with PostgreSQL.

Les étapes suivantes couvrent la configuration de la source, de la cible et de GoldenGate pour maintenir les bases de données synchronisées. Vous pouvez choisir de basculer vers OCI Database with PostgreSQL à tout moment, sans aucun temps d'arrêt, une fois le processus terminé.

  1. Préparer la base de données source
  2. Vider le schéma de la base de données source
  3. Préparer le système cible de base de données
  4. Utilisation de GoldenGate pour la réplication

Prérequis

Pour utiliser GoldenGate, assurez-vous que les prérequis suivants sont remplis :

  • Vérifiez que les ressources IAM et le réseau OCI requis sont en place. Pour plus d'informations, reportez-vous à Introduction à OCI Database with PostgreSQL.
  • Créez un système de base de données qui peut être utilisé comme destination pour la réplication GoldenGate.

  • Créez des instances de calcul pour héberger le client PostgreSQL qui peut se connecter aux systèmes de base de données source et de destination. Lorsque vous créez des instances :
    • Téléchargez la paire de clés SSH.

      Attention

      Toute personne qui a accès à la clé privée peut se connecter à l'instance. Stockez la clé privée dans un emplacement sécurisé.
    • Sélectionnez le VCN et le sous-réseau privé utilisés lors de la création du système de base de données.
    • Installez une version du client PostgreSQL compatible avec la version PostgreSQL du système de base de données en suivant les instructions figurant à l'adresse https://www.postgresql.org/download/.

Préparer la base de données source

Les bases de données source doivent répondre aux exigences des utilisateurs et de la configuration pour que GoldenGate puisse extraire et répliquer des données.

Conditions requises pour les utilisateurs

Les processus GoldenGate nécessitent un utilisateur de base de données qui peut capturer les données source et les transmettre à OCI Database with PostgreSQL. Nous recommandons de créer un utilisateur de base de données PostgreSQL dédié pour le processus d'extraction GoldenGate et le processus de réplication GoldenGate. Pour plus d'informations sur les utilisateurs de base de données et GoldenGate, reportez-vous à Privilèges de base de données pour Oracle GoldenGate for PostgreSQL.

Configuration requise

Toute base de données source doit être configurée pour prendre en charge le processus d'extraction GoldenGate. Les paramètres requis avec leurs valeurs pour toute base de données source sont les suivants :

  • listen_addresses : pour la connectivité distante d'une extraction ou d'une réplication, définissez "listen_addresses = * " afin de permettre la connectivité de base de données distante.
  • wal_level : la journalisation anticipée en écriture sur la base de données source doit être définie sur logical, ce qui ajoute les informations nécessaires à la prise en charge du décodage des enregistrements transactionnels.
  • max_replication_slots : le nombre maximal d'emplacements de réplication doit être défini pour prendre en charge un emplacement ouvert par extraction GoldenGate. En général, une seule extraction GoldenGate est nécessaire par base de données.
    Remarque

    Si la base de données source utilise déjà la réplication native PostgreSQL et tous les emplacements de réplication disponibles, augmentez la valeur pour autoriser l'inscription d'une extraction GoldenGate.
  • max_wal_senders : définissez la valeur maximale des émetteurs d'écriture anticipée pour qu'elle corresponde à la valeur maximale des emplacements de réplication.
  • track_commit_timestamp : vous pouvez éventuellement activer les horodatages de validation dans le journal d'écriture anticipée. Si cette option est activée en même temps que la journalisation logique en écriture anticipée, les enregistrements de validation LMD à partir de ce point sont capturés avec la valeur d'horodatage correcte. Sinon, le premier enregistrement capturé par GoldenGate aura un horodatage de validation incorrect.

Pour utiliser Community PostgreSQL en tant que base de données source, l'utilisateur peut apporter des modifications de configuration dans le fichier postgresql.conf et redémarrer la base de données pour appliquer les modifications :

listen_addresses = *
wal_level = logical                      
max_replication_slots = 1  (min required for GG)         
max_wal_senders = 1  (min required for GG)                       
track_commit_timestamp = on
Amazon Aurora PostgreSQL comme source

Dans Amazon Aurora PostgreSQL, les paramètres de base de données sont modifiés à l'aide de groupes de paramètres. Reportez-vous à la documentation Amazon AWS pour plus d'informations sur la modification des paramètres de base de données dans un nouveau groupe de paramètres et sur leur affectation à une instance de base de données.

Assurez-vous que les configuration requirements de la base de données sont remplies en vérifiant les paramètres du groupe de paramètres affecté à l'instance.

Le paramètre wal_level pour Amazon Aurora est configuré avec un paramètre appelé rds.logical_replication. Définissez rds.logical_replication sur 1 afin d'utiliser la base de données comme source pour l'extraction GoldenGate.

L'utilisateur de base de données utilisé pour la migration doit disposer de privilèges de réplication. Accordez des privilèges à l'utilisateur dans le système Amazon Aurora source à l'aide des éléments suivants :

grant replication to <migration-user>;
Amazon RDS pour PostgreSQL en tant que source

Dans Amazon RDS pour PostgreSQL, les paramètres de base de données sont modifiés à l'aide de groupes de paramètres. Reportez-vous à la documentation Amazon AWS pour plus d'informations sur la modification des paramètres de base de données dans un nouveau groupe de paramètres et sur leur affectation à une instance de base de données.

Assurez-vous que les configuration requirements de la base de données sont remplies en vérifiant les paramètres du groupe de paramètres affecté à l'instance.

Le paramètre wal_level pour les services de base de données Amazon est configuré avec un paramètre appelé rds.logical_replication. Définissez rds.logical_replication sur 1 afin d'utiliser la base de données comme source pour l'extraction GoldenGate.

L'utilisateur de base de données utilisé pour la migration doit disposer de privilèges de réplication. Accordez des privilèges à l'utilisateur dans le système Amazon RDS source à l'aide des éléments suivants :

grant replication to <migration-user>;
Base de données Azure pour PostgreSQL en tant que source

Dans Azure Database for PostgreSQL, les paramètres de base de données sont modifiés à l'aide des paramètres de serveur pour l'instance de base de données. Pour plus d'informations sur la modification des paramètres de base de données, reportez-vous à la documentation Azure Database for PostgreSQL.

Assurez-vous que les configuration requirements de la base de données sont satisfaites en vérifiant les paramètres sur l'instance source.

Lors de la configuration de GoldenGate pour une extraction PostgreSQL sur une base de données Azure pour une base de données PostgreSQL, wal_level doit être activé et défini sur LOGICAL.

L'utilisateur de base de données utilisé pour la migration doit disposer de privilèges de réplication. Accordez des privilèges à l'utilisateur dans le système source à l'aide des éléments suivants :

ALTER ROLE <migration-user> WITH REPLICATION;

Vider le schéma de la base de données source

Testez la connectivité de l'instance Compute au système de base de données source, puis videz le schéma de la base de données source à l'aide de la commande suivante :

/<path-to-binary>/pg_dump -U <user-to-take-dump> -h <IP-of-source-DB> -s -E 'UTF8' -d <source-DB-name> -f schema_only.sql
  • -U : utilisateur créant le fichier dump
  • -h : adresse d'hôte de la base de données source
  • -s : vidage uniquement du schéma, pas de données
  • -E : définition du codage client du fichier dump sur UTF-8
  • -d : base de données à vider
  • -f : fichier O/P pour vider le schéma de base de données

Ce schéma est utilisé lors de la préparation du système de base de données cible. Reportez-vous à Utilisation des utilitaires PostgreSQL tels que pg_dump pour plus d'informations sur pg_dump et sur OCI Database with PostgreSQL.

Préparer le système de base de données cible

Assurez-vous que les prérequis pour l'utilisation de GoldenGate afin de répliquer des données dans OCI Database with PostgreSQL sont respectés, que la base de données source est préparée, puis restaurez le schéma de la base de données source vers la cible OCI Database with PostgreSQL à l'aide de la commande suivante :

/<path-to-binary>/psql -U <user-to-load-dump> -d <target-DB-name> -h <Private_endpoint_of_target_database_system> -f schema_only.sql
  • -U : l'utilisateur restaure le dump
  • -h : adresse d'hôte de la base de données de destination
  • -d : base de données à vider
  • -f : fichier O/P pour vider le schéma de base de données

See Using PostgreSQL Utilties Such as pg_dump for more information on psql and OCI Database with PostgreSQL.

Conseil

Pour plus d'informations sur l'utilisation d'une instance pour se connecter à un système de base de données, reportez-vous à Connexion à une base de données.

Utilisation de GoldenGate pour la réplication

Procédez comme suit pour configurer GoldenGate en vue d'une utilisation avec OCI Database with PostgreSQL. Utilisez le compartiment contenant la base de données OCI Database with PostgreSQL.

  1. Créez un déploiement et sélectionnez PostgreSQL comme technologie.
  2. Créez une connexion source basée sur la base de données source et la connectivité de test.
  3. Créez une connexion de destination de serveur PostgreSQL et un test de connectivité.

    Remarque

    Pour la connectivité réseau, sélectionnez Adresse dédiée comme méthode de routage du trafic.
  4. Affectez les connexions source et de destination au déploiement.
  5. Ajoutez une extraction pour PostgreSQL au déploiement pour l'exécuter sur la connexion source et extrayez ou capturez des données.
    1. Activez la journalisation supplémentaire de niveau table pour la base de données source. Utilisez le nom de schéma créé lorsque vous avez vidé le schéma de base de données source. Pour plus d'informations, reportez-vous à l'étape Activer la journalisation supplémentaire dans Ajouter une extraction pour PostgreSQL : avant de commencer.
    2. Ajoutez une extraction de chargement initial (INI).
      1. Indiquez un nom de trace, par exemple, xx. Ce fichier contient les modifications apportées à la base de données source.
      2. Sur la page Fichier de paramètres, assurez-vous que les éléments suivants sont inclus dans le fichier :

        exttrail xx
        INITIALLOADOPTIONS USESNAPSHOT
        TABLE *.*;

        INITIALLOADOPTIONS doit être ajouté pour garantir un cliché cohérent de la base de données une fois l'extraction de chargement initiale terminée, avec le numéro LSN.

      3. Sélectionnez Créer et exécuter.
      4. Surveillez le traitement jusqu'à ce qu'il soit terminé, puis recherchez le numéro LSN dans le fichier d'état. Conservez le numéro LSN pour une utilisation ultérieure.
  6. Ajoutez une autre extraction au déploiement. Cette fois, choisissez le type d'extraction Extraction de capture de données de modification (CDC).
    1. Pour Commencer, sélectionnez Aucun.
    2. Indiquez un nom de trace, par exemple, yy.
    3. Sur la page Fichier de paramètres, assurez-vous que les éléments suivants sont inclus dans le fichier :

      exttrail yy
      TABLE public.*;

      INITIALLOADOPTIONS doit être ajouté pour garantir un cliché cohérent de la base de données une fois l'extraction de chargement initiale terminée, avec le numéro LSN.

    4. Choisissez Créer. N'exécutez pas encore l'extraction.
    5. Sur la page de déploiement, dans le menu Action du nouveau CDC, sélectionnez Démarrer avec option.
    6. Pour Point de départ, sélectionnez A la CSN
    7. Pour CSN, entrez le numéro de LSN de l'extraction initiale et sélectionnez Démarrer. Les transactions de la base de données source seront capturées et affichées dans l'onglet Statistiques de l'extraction CDC.
    Remarque

    Jusqu'à présent, nous n'avons utilisé que la base de données source. Le début de l'extraction de chargement initial et du CDC enregistre les modifications dans la source dans les fichiers trace respectifs du déploiement. Le processus Replicat fournit les données de ces fichiers trace vers la base de données OCI Database with PostgreSQL.
  7. Ajoutez une réplication pour PostgreSQL au déploiement. Ce processus Replicat concerne l'extraction de chargement initial (REINI).
    1. Créez une table de points de reprise. Pour plus d'informations, reportez-vous à Ajout d'une réplication pour PostgreSQL : avant de commencer.
    2. Lors de la création de la réplication, indiquez le nom de trace à partir de l'interface INI, par exemple, xx.
    3. Indiquez la table de point de reprise pour le processus Replicat.
    4. Sur la page Fichier de paramètres, assurez-vous que des éléments tels que les suivants sont inclus dans le fichier :

      MAP public.* TARGET public.*;
    5. Sélectionnez Créer et exécuter. Vérifiez que les données ont commencé à être chargées dans OCI Database with PostgreSQL.
  8. Ajoutez une réplication pour PostgreSQL au déploiement. Cette réplication concerne l'extraction de capture des données de modification (RECDC).
    1. Lors de la création de la réplication, indiquez le nom de trace à partir du CDC, par exemple, yy.
    2. Indiquez la table de point de reprise pour le processus Replicat.
    3. Sur la page Fichier de paramètres, assurez-vous que des éléments tels que les suivants sont inclus dans le fichier :

      MAP public.* TARGET public.*;
    4. Choisissez Créer. N'exécutez pas le RECDC tant que le REINI n'est pas terminé. GoldenGate doit comporter deux processus d'extraction et deux processus de réplication.
    5. Sur la page de déploiement, dans le menu Action du nouveau RECDC, sélectionnez Démarrer.
  9. Vérifiez le statut sur la base de données OCI Database with PostgreSQL et faites correspondre le nombre et les valeurs d'enregistrements.