Migration de Oracle vers PostgreSQL
Ora2Pg
Qu'est-ce qu'Ora2Pg ?
Ora2Pg est un outil open source (licence GPL), écrit en Perl, qui permet d'automatiser la migration des schémas, des données et du code PL/SQL d'une base de données Oracle vers PostgreSQL. Il analyse la base Oracle, génère des scripts SQL compatibles PostgreSQL, et peut même exporter les données. Ora2Pg est maintenu activement depuis 2001 et est aujourd'hui un standard pour les migrations Oracle → PostgreSQL.
Fonctionnalités principales
- Export du schéma : Tables, vues, index, contraintes, séquences, utilisateurs et droits.
- Conversion des types de données : Oracle
VARCHAR2→ PostgreSQLVARCHAR, OracleNUMBER→ PostgreSQLNUMERIC, etc. - Conversion du code PL/SQL : Ora2Pg convertit automatiquement une grande partie du code PL/SQL (fonctions, procédures, triggers) en PL/pgSQL, mais une relecture manuelle est souvent nécessaire pour les spécificités Oracle.
- Export des données : Possibilité d'exporter les données sous forme de fichiers plats (CSV, INSERT SQL) ou de les charger directement dans PostgreSQL.
- Rapport d'évaluation : Ora2Pg génère un rapport détaillant les objets non convertis automatiquement, ce qui permet d'estimer l'effort de migration restant.
Exemples d'utilisation
1. Installation et configuration
Ora2Pg nécessite une installation Perl et des connecteurs Oracle/PostgreSQL. Exemple de configuration minimale dans ora2pg.conf :
ORACLE_HOME /usr/lib/oracle/19.3/client64
ORACLE_DSN dbi:Oracle:host=localhost;sid=ORCL
ORACLE_USER scott
ORACLE_PWD tiger
SCHEMA scott
OUTPUT output.sql
TYPE TABLE,VIEW,SEQUENCE,INDEX,TRIGGER,FUNCTION,PROCEDURE,PACKAGE2. Export d'un schéma Oracle
ora2pg -c ora2pg.conf -t TABLE,VIEW,SEQUENCE -o schema.sql→ Génère un fichier schema.sql avec la structure des tables, vues et séquences.
3. Export des données
ora2pg -c ora2pg.conf --data_only --output data.sql→ Exporte les données sous forme de requêtes INSERT.
4. Conversion d'une fonction PL/SQL
Ora2Pg convertit automatiquement des fonctions comme :
-- Oracle
CREATE OR REPLACE FUNCTION get_salary(p_emp_id NUMBER)
RETURN NUMBER IS
v_salary NUMBER;
BEGIN
SELECT salary INTO v_salary FROM employees WHERE emp_id = p_emp_id;
RETURN v_salary;
END;→ En PL/pgSQL :
-- PostgreSQL
CREATE OR REPLACE FUNCTION get_salary(p_emp_id NUMERIC)
RETURNS NUMERIC AS $$
DECLARE
v_salary NUMERIC;
BEGIN
SELECT salary INTO v_salary FROM employees WHERE emp_id = p_emp_id;
RETURN v_salary;
END;
$$ LANGUAGE plpgsql;5. Migration incrémentale
Ora2Pg peut être utilisé pour migrer les données en plusieurs étapes :
- Pré-migration des données statiques.
- Arrêt de la production Oracle le jour J.
- Migration des données restantes.
- Re-création des index et contraintes sur PostgreSQL.
Points forts et limites
- Points forts :
- Automatisation poussée, gain de temps.
- Communauté active, documentation complète.
- Flexibilité (export en fichiers ou chargement direct).
- Limites :
- Certaines fonctionnalités Oracle avancées (comme les packages complexes) nécessitent une adaptation manuelle.
- Ora2Pg ne modifie pas l'applicatif (seulement la base de données).
Ressources utiles
IvorySQL
IvorySQL est un moteur de base de données basé sur PostgreSQL et qui est compatible Oracle.
Vous trouverez plus d'information sur sa page qui lui est consacré