Plan de migration

Module N1

Dalibo SCOP

24.09

29 août 2024

Sur ce document

Formation Module N1
Titre Plan de migration
Révision 24.09
PDF https://dali.bo/n1_pdf
EPUB https://dali.bo/n1_epub
HTML https://dali.bo/n1_html
Slides https://dali.bo/n1_slides
TP https://dali.bo/n1_tp
TP (solutions) https://dali.bo/n1_solutions

Plan de migration

PostgreSQL

Introduction

Ce module est organisé en quatre parties :

  • Méthodologie de la migration
  • Choix de l’outil de migration
  • Installation d’Ora2Pg
  • Rapport d’évaluation

Avertissement

  • Ceci est écrit par des spécialistes de PostgreSQL
    • pas d’Oracle

Méthodologie de migration

La première migration est importante :

  • Les méthodes employées seront réutilisées, améliorées…
  • Un nouveau SGBD doit être supporté pendant de nombreuses années
  • Elle influence la vision des utilisateurs vis-à-vis du SGBD
  • Une migration ratée ou peu représentative est un argument pour les détracteurs du projet

Projet de migration

Le projet doit être choisi avec soin :

  • Ni trop gros (trop de risque)
  • Ni trop petit (sans valeur)
  • Transversal :
    • Implication maximale
    • Projet de groupe, pas individuel

Équipe du projet de migration

  • Chef de projet
  • Équipe hétérogène (pas que des profils techniques)
  • Recetteurs et utilisateurs nombreux (validation du projet la plus continue possible)

Expertise extérieure

  • Société de service
  • Contrat de support
  • Expert PostgreSQL

Gestion de projet

  • Réunions de lancement, de suivi
  • Reporting
  • Serveurs de projet
  • Pas un projet au rabais, ou un travail de stagiaire

Passer à PostgreSQL

  • Ce n’est pas une révolution
  • Le but est de faire des économies
    • … sans chamboulement

Motiver

  • Formations indispensables
  • Divers cursus
    • du chef de projet au développeur
  • Adoption grandissante de PostgreSQL
    • pérennité

Valoriser

  • Concepts PostgreSQL très proches des SGBD propriétaires
    • Adapter les compétences
    • Ne pas tout reprendre à zéro

Gestion des délais

Souvent moins important :

  • Le service existe déjà
  • Donner du temps aux acteurs

Coûts

  • Budget ?
  • Open source <> gratuit
    • coûts humains
    • coûts matériels

Qualité

  • Cruciale
    • la réussite est obligatoire
  • Le travail effectué doit être réutilisable
  • Ou tout du moins l’expérience et les méthodologies

But de la première migration

  • Privilégier la qualité
  • Contrôler les coûts
  • N’est souvent pas contrainte par des délais stricts

Choix de l’outil de migration

Avant de pouvoir porter l’application et le PL :

  • Migrer le schéma
  • Migrer les données

Besoins de la migration : schéma

  • Veut-on migrer le schéma tel quel ?
  • Utiliser les fonctionnalités de PostgreSQL ?
    • n’est plus vraiment à isofonctionnalité
  • Créer un nouveau schéma :
    • d’un coup
    • les tables d’abord, les index et contraintes ensuite ?

Besoins de la migration : types

  • On rencontre souvent les types suivants sous Oracle :
    • number(18,0), number(4,0)
    • int : -2147483648 à +2147483647 (4 octets, number(9,0))
    • bigint : -9223372036854775808 à 9223372036854775807 (8 octets, number(18,0))
  • Type natifs bien plus performants (gérés par le processeur, taille fixe)
  • Certains outils migrent en numeric(x,0), d’autres en int/bigint
    • peut être un critère de choix

Besoins de la migration : autres types

  • Types plein texte ?
  • Blob ?
  • GIS ?
  • Un développement peut être nécessaire pour des types spéciaux

Besoins de la migration

  • Déclarer les tables
  • Les remplir
  • Puis seulement déclarer les index, PK, FK, contraintes…
  • Performances…

Migration des données

Veut-on :

  • Migrer en une seule fois les données ? (« Big Bang »)
  • Pouvoir réaliser des incréments ?
  • Paralléliser sur plusieurs sessions/threads ?
  • Modifier des données « au passage » ?

Fonctionnalités problématiques

Lors de la migration, certaines fonctionnalités d’Oracle auront peu ou pas d’équivalent :

  • Vues matérialisées (mise à jour)
  • Partitionnement (différences)
  • Synonymes
  • Conversion de type implicite
  • Absence de hint (tag de requête)
  • Accès par ROWID

Choix de l’outil

Suivant les réponses aux questions précédentes, vous choisirez :

  • Ora2Pg
  • Un ETL :
    • Kettle (Pentaho Data Integrator)
    • Talend
  • De développer votre propre programme
  • De mixer les solutions

Ora2Pg - introduction

  • En Perl
  • Se connecte à Oracle
  • Génère un fichier SQL compatible avec PostgreSQL, en optimisant les types
  • Conversion automatique d’une partie du code PL/SQL en PL/pgSQL
  • Simple de mise en œuvre
  • Rapide au chargement (utilise COPY)

Ora2Pg - défauts

  • Big-Bang
    • pas d’incrémental

Ora2Pg - fonctionnalités

  • Exporte tout le schéma Oracle :
    • tables, vues, séquences, contraintes d’intégrité, trigger, etc.
    • utilisateurs et droits
  • Gère la conversion des types
    • blob et clob -> bytea et text
    • number -> int, bigint, real, double, decimal
  • Réécrit les entêtes de fonction correspondant aux fonctions Oracle
  • Aide à :
    • la conversion PL/SQL -> PL/pgSQL
    • au partitionnement (par héritage, ou déclaratif)

Les ETL - avantages

  • Spécialisés dans la transformation et le chargement de données
  • Rapides (cœur de métier)
  • Parallélisables
  • Très souples sur la transformation
  • Migration incrémentale possible (fusion, slow changing dimensions, etc.)

Les ETL - inconvénients

  • Migration sommaire du schéma
    • quand c’est supporté
  • Beaucoup de travail de paramétrage
    • peut-être 200 jobs à créer si 200 tables…
  • Apprentissage long
    • outil complexe et riche fonctionnellement

Installation d’Ora2Pg

Étapes :

  • Téléchargement
  • Pré-requis
  • Compilation
  • Installation
  • Utilisation

Téléchargement

Dépendances requises

  • Oracle >= 8i client ou serveur
  • Environnement Oracle correct (ORACLE_HOME et PATH comprenant sqlplus)
  • libaio (Redhat) ou libaio1 (Debian)
  • Unix : Perl 5.10+
  • Windows : Strawberry Perl 5.10+ ou ActiveStep Perl 5.10+
  • Modules Perl
    • Time::HiRes
    • Perl DBI > v1.614 et DBD::Oracle

Dépendances optionnelles

En option :

  • PostgreSQL >= 8.4 client ou serveur
  • DBD::Pg pour l’import direct dans PostgreSQL
  • Compress::Zlib : compression des fichiers en sortie
  • DBD::MySQL pour migrer les bases MySQL
  • DBD::ODBC pour migrer les bases Microsoft SQL Server

Compilation et installation

  • Décompresser l’archive téléchargée
  • Générer les fichiers de compilation
  • Compiler et installer
  • Ora2Pg est prêt à être configuré !

Évaler une migration

Le script ora2pg s’utilise de la façon suivante :

ora2pg [-dhpqv --estimate_cost --dump_as_html] [--option value]

Utilisation basique :

ora2pg -t ACTION [-c fichier_de_configuration]

Rapport d’évaluation - 1

  • Rapport exhaustif du contenu de la base Oracle
ora2pg -t SHOW_REPORT
ora2pg -t SHOW_REPORT --dump_as_html

Rapport d’évaluation - 2

  • Estimation du coût de migration
ora2pg -t SHOW_REPORT --estimate_cost
ora2pg -t SHOW_REPORT --estimate_cost --dump_as_html

Conclusion

Points essentiels :

  • Grande importance de la première migration
  • Même si Oracle et PostgreSQL sont assez similaires, il y a de nombreuses différences
  • Choix des outils de migration
  • La majorité du temps de migration est imputable à la conversion du PL/SQL
  • Évaluation de la migration, ce qui doit ou pas être migré et comment

Questions

N’hésitez pas, c’est le moment !

Quiz

Installation de PostgreSQL depuis les paquets communautaires

Travaux pratiques

Travaux pratiques (solutions)