ORA2PG est un outil facilitant la migration des bases de données Oracle vers PostgreSQL.
L'outil permet de migrer l'ensemble des éléments d'une base Oracle, et les dernières versions peuvent même transformer une partie du code PL/SQL en PLPGSQL.
Le contributeur principal est Gilles Darold et on peut noter qu'une des références ayant fait un usage d'ora2pg est le groupe Bull.
Bien que présent dans les dépôts Multiverse d'ubuntu, il n'est pas installable. Ceci fait d'ailleurs l'objet d'un rapport de bug sur Launchpad. En effet, il dépend du module Perl libdbd-oracle-perl dépendant du paquet oracle-instantclient-basic (la couche de connexion propriétaire) qui n'est pas disponible dans les dépôts car délivré exclusivement par Oracle. On peut cependant assez simplement installer ces paquets sans avoir à passer par une étape de compilation.
Tout d'abord, il nous faut récupérer le paquet RPM oracle-instantclient-basic-10.2.0.3-1.i386.rpm sur le site d'Oracle à cette adresse.
Ensuite, transformer, à l'aide de l'utilitaire Alien, ce paquet RPM en paquet Debian et l'installer directement :
sudo alien -i oracle-instantclient-basic-10.2.0.3-1.i386.rpm
On peut maintenant installer le paquet libdbd-oracle-perl qui n'est pas présent dans les dépôts Ubuntu. On le trouve chez Debian à l'adresse http://ftp.debian.org/debian/pool/contrib/libd/libdbd-oracle-perl/.
Pour l'installer :
sudo gdebi libdbd-oracle-perl_1.21-2_i386.deb
Et enfin, on peut installer installer le paquet ora2pg.
Il suffit de modifier un fichier de configuration sur le modèle fourni par le logiciel (ora2pg.conf
) et lancer ora2pg avec ce fichier de configuration en paramètre :
ora2pg ora2pg.conf
On obtient en retour un fichier « output.sql » compatible avec PostgreSQL.
Principales options du fichier :
ORACLE_HOME /usr/local/oracle/10.2.0.3 #chemin d'installation d'oracle-instantclient-basic ORACLE_DSN dbi:Oracle:host=localhost;sid=xe # chaine de connexion Oracle ORACLE_USER system ORACLE_PWD manager SCHEMA SCOTT # schéma Oracle cible, en majuscules TYPE TABLE SEQUENCE DATA PACKAGE FUNCTION PROCEDURE TRIGGER # types d'objets à extraire séparés par des espaces OUTPUT SCOTT_all.sql # fichier sql de sortie, mettre SCOTT_all.sql.bz2 pour l'obtenir compressé FKEY_DEFERRABLE 1 # permet de créer les enregistrements sans que les Foreign Key bloquent le chargement DEFER_FKEY 1 # permet de créer les enregistrements sans que les Foreign Key bloquent le chargement PLSQL_PGSQL 1 # Pour transformer le code PL/SQL en PLPGSQL