Guide de mise à niveau des versions majeures pour OCI Database with PostgreSQL
Mettez à niveau les principales versions d'OCI Database with PostgreSQL à l'aide de l'approche pg_dump/pg_restore ou pglogical.
OCI Database with PostgreSQL est un service entièrement géré pour l'exécution de PostgreSQL sur Oracle Cloud, conçu pour réduire les frais d'exploitation associés à la gestion de l'infrastructure sous-jacente. Il rationalise l'administration quotidienne grâce au provisionnement automatisé, à l'application de correctifs prise en charge, aux sauvegardes automatisées et aux fonctionnalités de surveillance intégrées.
La maintenance des environnements OCI PostgreSQL à jour est importante pour tirer parti des dernières améliorations des performances, des mises à jour de sécurité et des nouvelles fonctionnalités.
Les principales versions de PostgreSQL prises en charge sont 14, 15, 16 et 17.
Les approches couramment adoptées suivantes pour les mises à niveau majeures de version offrent des méthodes structurées et reproductibles pour la migration des données et la transition des applications vers des versions plus récentes.
pg_dump et pg_restore
La mise à niveau d'OCI PostgreSQL à l'aide de pg_dump et pg_restore est une approche simple et fiable, en particulier lors de l'exécution de mises à niveau de version majeures ou de la migration entre les environnements. Cette méthode garantit une migration propre et contrôlée des données et des objets de base de données. Grâce à une gestion appropriée des rôles, du parallélisme et de la validation, cette méthode garantit un processus de migration fluide et contrôlé.
Ce document parcourt le processus complet de mise à niveau à l'aide des commandes exactes.
Remarques importantes
pg_dumpetpg_restoresont des outils de sauvegarde logique.- Convient pour les mises à niveau de version majeures.
- Requiert un temps d'inactivité pendant la permutation finale.
- Les rôles doivent toujours être gérés séparément.
Workflow de mise à niveau
Le processus de mise à niveau à l'aide de pg_dump et pg_restore comprend les étapes suivantes.
- Etape 1 : vidage des objets globaux (rôles)
Cette étape permet de garantir que tous les rôles, droits d'accès et contrôles d'accès sont préservés, ce qui permet aux utilisateurs et aux applications de maintenir un accès cohérent après la mise à niveau.
- Etape 2 : vidage de la base de données
Cette étape crée une sauvegarde logique complète de la base de données, fournissant un moyen fiable de transférer des données dans l'environnement mis à niveau.
- Etape 3 : modification du fichier dump global
Cette étape nous permet d'examiner et d'ajuster le vidage selon les besoins, ce qui contribue à assurer la compatibilité avec la version cible de PostgreSQL et un processus de restauration plus fluide.
- Etape 4 : Restauration d'objets globaux
La restauration des rôles permet de s'assurer que les utilisateurs et les droits d'accès appropriés sont en place avant la réintroduction des données, ce qui prend en charge un environnement cohérent et sécurisé.
- Etape 5 : restauration de la base de données
Cette étape amène les données dans le système mis à niveau, en terminant la transition et en rendant la base de données prête à être utilisée sur la nouvelle version de PostgreSQL.
Etape 1 : vidage des objets globaux (rôles)
Tout d'abord, exportez les rôles et les objets globaux de la base de données source (version antérieure) :
/usr/lib/postgresql/bin/pg_dumpall -U psql -h <IP_of_Source_DB> -g --no-role-passwords --no-tablespaces -f <all_roles>.sql
-
-g: passe les objets globaux tels que les rôles et les utilisateursCette option se concentre sur l'extraction des objets à l'échelle du cluster, tels que les rôles, les utilisateurs et leurs privilèges associés, plutôt que sur les données propres à la base de données. La capture de ces éléments séparément permet de garantir que les contrôles d'accès peuvent être recréés de manière cohérente dans l'environnement cible.
-
--no-role-passwords: évite les problèmes liés aux mots de passeCela exclut les définitions de mot de passe de rôle du vidage, ce qui peut aider à simplifier le processus de restauration, en particulier lorsque les stratégies de mot de passe ou les méthodes d'authentification diffèrent entre les environnements. Il permet également de reconfigurer les informations d'identification selon les besoins après la mise à niveau.
-
--no-tablespaces: empêche les problèmes de dépendance de tablespaceCela permet d'ignorer les définitions de tablespace du vidage, ce qui permet d'éviter les dépendances sur des configurations de stockage spécifiques qui pourraient ne pas exister dans l'environnement cible. Cela peut rendre le processus de restauration plus portable et plus facile à adapter au stockage géré par OCI.
-
-f <all_roles>.sql: écrit la sortie dans un fichier pour la réutilisationCela dirige la sortie vers un fichier SQL, ce qui facilite la révision, la version et la réutilisation pendant la phase de restauration. Le fait de disposer d'un fichier distinct pour les objets globaux prend également en charge un processus de mise à niveau plus contrôlé et plus détaillé.
Etape 2 : vidage de la base de données
Effectuez un vidage de base de données au format de répertoire :
/usr/lib/postgresql/bin/pg_dump -v -h < IP_of_Source_DB > -U <username> -d <databasename> -Fd -C -j <Num of parallel jobs> -Z0 -f sampledb_dir_format
-
-Fd: format d'annuaire (création de plusieurs fichiers)L'option
-Fd(format d'annuaire) est choisie car elle prend en charge les dumps parallèles (-j), ce qui améliore les performances des bases de données volumineuses et permet des restaurations plus granulaires et flexibles des objets individuels. Ce format stocke le fichier dump en tant que répertoire contenant plusieurs fichiers plutôt qu'une seule archive. Il prend en charge le traitement parallèle et offre une plus grande flexibilité lors de la restauration, en particulier pour les bases de données plus volumineuses.Vous pouvez également utiliser le format personnalisé (
-Fc) lorsqu'une sauvegarde à fichier unique est préférée, tout en prenant en charge les fonctions de compression et de restauration sélective. -
-C: inclut la commande de création de base de donnéesCette option ajoute les instructions nécessaires pour créer la base de données lors de la restauration, ce qui permet de rationaliser le processus de configuration dans l'environnement cible.
-
-j: autorise les travaux parallèles pour un vidage plus rapideCela permet à l'opération de vidage d'exécuter plusieurs travaux simultanément, ce qui peut réduire considérablement la durée globale requise pour les jeux de données volumineux.
-
-Z0: pas de compression (améliore les performances)La désactivation de la compression peut améliorer les performances de vidage en réduisant la surcharge de la CPU, ce qui peut être bénéfique lorsque la vitesse est une priorité et que les contraintes de stockage sont minimales.
-
-v: mode verbose pour surveiller la progressionCette option fournit une sortie détaillée pendant l'exécution, ce qui facilite le suivi de la progression et l'identification des problèmes au début du processus de vidage.
Etape 3 : modification du fichier dump global
Avant de restaurer les rôles :
Modifiez le fichier <all_roles>.sql en fonction des instructions suivantes.
Supprimez les éléments suivants du fichier dump des rôles :
- Toutes les instructions
CREATE,ALTER ROLE,GRANTpour les rôles commençant paroci_* - Tout attribut de rôle non pris en charge (en particulier dans les services gérés tels qu'OCI PostgreSQL)
- Toutes les instructions
CREATEetALTER ROLEpour l'administrateur qui ont été créées lors de la configuration initiale de la base de données OCI PostgreSQL, car elles doivent être recréées lors du provisionnement de la base de données de version ultérieure. Si vous prévoyez d'utiliser un autre nom utilisateur d'administrateur, assurez-vous que l'utilisateur d'administrateur approprié est indiqué lors de la création de la base de données OCI PostgreSQL mise à niveau.
En outre, mettez à jour le fichier dump des rôles pour supprimer ou modifier les commandes qui nécessitent des privilèges SUPERUSER, car elles ne sont pas prises en charge dans les environnements gérés.
Par exemple :
Initial :
ALTER ROLE test WITH NOSUPERUSER INHERIT CREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'test';
Modifié :
ALTER ROLE/USER test WITH CREATEROLE CREATEDB LOGIN PASSWORD 'test';
Etape 4 : Restauration d'objets globaux
Restaurer les rôles sur le système de base de données cible (version ultérieure) :
/usr/lib/postgresql/bin/psql -U <username> -d <databasename> -h <IP_of_Target_Database_System> -f <all_roles>.sql
Cette étape garantit :
- Tous les utilisateurs et rôles sont créés
- Droits d'accès disponibles avant la restauration des données
Etape 5 : Restauration de la base de données
Ignorez les éléments suivants du fichier dump toc.dat :
- Toutes les instructions
CREATE,ALTER ROLEetGRANTéchouent pour les rôles dont le nom commence paroci_*.
Restaurez la base de données sur le système de la base de données cible à l'aide des éléments suivants :
/usr/lib/postgresql/bin/pg_restore -v -h <IP_of_Target_Database_System> -U <username> -j <Num of parallel jobs> -C -d <databasename> sampledb_dir_format
-C: création d'une base de données, connexion à celle-ci et restauration dans la base de données-j: restauration parallèle pour une exécution plus rapide-v: sortie détaillée pour suivre la progression
Cette étape garantit :
- Vérifiez la sortie détaillée des messages
ERROR:et assurez-vous que la commande est terminée avec le code de sortie du shell0. Les erreurs liées aux utilisateursoci_*peuvent être ignorées.
Pour les environnements comportant plusieurs bases de données, nous vous recommandons d'exécuter les commandes précédentes séparément pour chaque base de données afin de garantir un processus de mise à niveau complet et cohérent.
Considérations relatives aux performances
- Utiliser des valeurs
-jsupérieures en fonction de l'UC disponible - Utilisez
-Z0pendant le vidage pour des performances plus rapides - Garantir une capacité d'E/S disque suffisante
- Surveiller la progression des restaurations à l'aide de journaux détaillés
Validation après restauration
Après avoir effectué la restauration, effectuez les tâches suivantes.
- Vérifier le nombre de lignes
Cette tâche permet de vérifier que toutes les données ont été migrées et qu'il n'y a pas d'écart entre les bases de données source et cible.
- Vérifier la connectivité de l'application
Cette tâche permet de s'assurer que les applications peuvent se connecter à la base de données mise à niveau et interagir avec elle comme prévu.
- Valider les rôles et les autorisations
Cette tâche permet de vérifier que les utilisateurs et les rôles disposent des droits d'accès et privilèges appropriés dans le nouvel environnement.
- Exécutez la commande suivante pour chaque base de données.
VACUUM ANALYZE <database_name>;Cette commande permet de mettre à jour les statistiques internes utilisées par le planificateur de requêtes, ce qui permet à OCI PostgreSQL de générer des plans d'exécution plus efficaces en fonction des données actuelles. Il peut également aider à optimiser les performances globales après la restauration, en particulier pour les bases de données ou les charges de travail plus volumineuses avec des requêtes complexes.
pglogique
L'extension pglogical permet la réplication logique sur plusieurs systèmes de base de données Oracle Cloud Infrastructure (OCI) PostgreSQL. Cette extension prend en charge la réplication PostgreSQL version croisée, ce qui en fait une approche appropriée et robuste pour effectuer des mises à niveau de base de données avec un temps d'arrêt minimal. En activant la réplication logique entre les systèmes source et cible, vous pouvez migrer les données de manière transparente d'une version à l'autre tout en maintenant la disponibilité des applications.
pglogical est particulièrement utile dans les situations suivantes :
- Mises à niveau de version majeures
- Migrations entre environnements
pglogical permet une synchronisation transparente des données entre :
- Instances PostgreSQL dans différentes régions et domaines de disponibilité OCI
- Bases de données déployées dans différents réseaux cloud virtuels
- Services PostgreSQL gérés sur plusieurs fournisseurs cloud
- Instances PostgreSQL autogérées (cloud ou sur site)
Cette flexibilité fait de pglogical une solution puissante pour les mises à niveau de base de données, les migrations et les déploiements hybrides.
Configuration requise pour la connectivité réseau
- Si les deux systèmes de base de données se trouvent dans le même VCN, la connectivité est automatiquement disponible.
- Si les bases de données se trouvent dans différents réseaux cloud virtuels de la même région, configurez la passerelle d'appairage local pour établir la communication.
- Si les bases de données se trouvent dans des différents réseaux cloud virtuels de la région, configurez DRG (Dynamic Route Gateway) pour établir la communication.
Activer l'extension pglogique sur le système de base de données source et cible
Effectuez les étapes suivantes sur les bases de données source (version antérieure) et cible (version ultérieure) :
- Connectez-vous à la console Oracle Cloud et accédez à votre système de base de données OCI PostgreSQL.
- Modifiez la configuration en accédant au fichier de configuration.
- Sélectionnez Copier la configuration et mettez à jour les paramètres requis. Sous Variables utilisateur (lecture/écriture), :
wal_level = logicaltrack_commit_timestamp = 1
- Activer l'extension : sous Configurer les extensions, sélectionnez
pglogicalet créez la configuration. - Accédez à votre système de base de données, sélectionnez Modifier sous Configuration, puis appliquez la configuration précédemment créée au système de base de données.
L'état du système de base de données est initialement Mise à jour. Attendez qu'il devienne actif avant de continuer.
Cette configuration prépare les deux environnements pour la réplication logique en activant les paramètres et extensions requis, ce qui permet à
pglogicalde capturer et de synchroniser les modifications de manière fiable entre les bases de données source et cible au cours du processus de mise à niveau. - Une fois le système de base de données actif, connectez-vous à la base de données et vérifiez les extensions activées à l'aide de la requête suivante.
SHOW oci.admin_enabled_extensions; - Créez l'extension
pglogicalà l'aide de la commande suivante :CREATE EXTENSION pglogical;
Configurer la base de données source
Connectez-vous en tant qu'administrateur (utilisateur indiqué lors de la création de la base de données OCI PostgreSQL) et accordez les privilèges nécessaires pour activer la réplication logique.
alter role xxx with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to xxx ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx;
xxx est l'exemple d'utilisateur créé lors du provisionnement du système de base de données.
Configurer pglogical on Source (éditeur)
- Créez le noeud d'éditeur sur la base de données source.
SELECT pglogical.create_node(node_name := 'provider1', dsn := 'host=<source_database_fqdn> port=5432 user=xxx password=xxxxx dbname=pglogical_source');node_name: indiquez le nom de l'éditeur à créer sur la base de données source.host: entrez le nom de domaine qualifié complet de la base de données source.port_number: indiquez le port sur lequel la base de données source est exécutée.database_name: indiquez la base de données dans laquelle créer la publication.
- Ajoutez toutes les tables du schéma
publicau jeu de réplication par défaut.SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
Configurer une base de données cible
Connectez-vous en tant qu'administrateur (utilisateur indiqué lors de la création de la base de données OCI PostgreSQL) et accordez les privilèges nécessaires pour activer la réplication logique.
alter role xxx with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to xxx ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx;
xxx est l'exemple d'utilisateur créé lors de la configuration de la base de données.
Ignorez la commande
alter role ...replication pour l'administrateur sur la base de données OCI PostgreSQL version 16 et ultérieure, car l'administrateur hérite du rôle de réplication par défaut à partir d'OCI PostgreSQL 16.Avant de poursuivre, assurez-vous que :
-
Tous les schémas et objets requis existent sur la cible
Les éléments incluent les schémas, les tables, les index, les extensions et tous les objets de base de données requis. La mise en place de ces éléments permet de garantir que les opérations de réplication ou de restauration peuvent se poursuivre sans erreurs de dépendances manquantes. L'existence peut être confirmée en comparant les listes de schémas (par exemple, en utilisant
\dnet\dtdans psql) et en validant que les extensions requises sont installées sur la source et la cible. -
La structure de la base de données correspond à la source
La base de données cible doit être étroitement alignée sur la source en termes de définitions de schéma, de noms d'objet et de structure globale. Cette cohérence facilite la migration des données et réduit les risques de conflits ou d'incohérences lors de la synchronisation. Vérifiez les définitions de schéma (par exemple, en utilisant
pg_dump --schema-only) ou en comparant les structures de table et le nombre d'objets entre les systèmes source et cible.
Configuration de pglogical sur la cible (abonné)
- Créez le noeud abonné sur la base de données cible :
SELECT pglogical.create_node(node_name := 'subscriber1', dsn := 'host=<target_database_fqdn> port=5432 user=xxx password=xxxxx dbname=pglogical_target');node_name: définissez le nom de l'abonné sur la base de données cible.host: entrez le nom de domaine qualifié complet de la base de données cible.port_number: entrez le port sur lequel la base de données cible est exécutée.database_name: indiquez le nom de la base de données dans laquelle l'abonnement sera créé.
- Créez l'abonnement pour démarrer les processus de synchronisation et de réplication en arrière-plan :
SELECT pglogical.create_subscription(subscription_name := 'subscription1', provider_dsn := 'host=<source_database_fqdn> port=5432 user=xxx password=xxxxxx dbname=pglogical_source sslmode=require');subscription_name: indiquez le nom de l'abonnement.host: indiquez le nom de domaine qualifié complet de la base de données source.port_number: indiquez le port sur lequel la base de données cible est exécutée.database_name: indiquez le nom des bases de données source.
Vérifier la réplication
- Vérifier le statut de l'abonnement (cible) : exécutez l'instruction suivante pour vérifier le statut de l'abonnement sur la base de données cible.
SELECT * FROM pglogical.show_subscription_status(); - Vérifier le statut de la réplication (source) : exécutez l'instruction suivante pour vérifier le statut de la réplication sur la base de données source.
SELECT * FROM pg_stat_replication;
Si les deux vérifications indiquent un statut actif sans décalage ou modifications en attente, ce résultat suggère que la réplication est terminée et que la base de données cible est entièrement synchronisée avec la source.
Pour plus d'informations sur pglogical, y compris des étapes détaillées et des explications, reportez-vous à Synchronisation inter-région d'OCI Database with PostgreSQL à l'aide de l'extension pglogical
Conclusion
En conclusion, les mises à niveau majeures de version utilisant pg_dump/pg_restore et pglogical offrent chacune des avantages distincts selon le cas d'utilisation. L'approche pg_dump/pg_restore est simple et fiable pour les bases de données plus petites ou lorsque le temps d'arrêt est acceptable, mais elle peut prendre beaucoup de temps pour les ensembles de données volumineux. En revanche, pglogical permet des mises à niveau de temps d'arrêt quasi nul en répliquant les données entre les versions, ce qui les rend mieux adaptées aux systèmes volumineux ou stratégiques.
Le choix de la bonne méthode dépend de facteurs tels que la taille de la base de données, les temps d'arrêt acceptables et la complexité opérationnelle. Quelle que soit l'approche, une planification, des tests et une validation approfondis après la mise à niveau sont essentiels pour garantir l'intégrité des données et une transition en douceur vers la nouvelle version d'OCI PostgreSQL.