{"id":6814,"date":"2026-04-25T12:13:38","date_gmt":"2026-04-25T10:13:38","guid":{"rendered":"https:\/\/rootfan.com\/?p=6814"},"modified":"2026-04-25T17:20:39","modified_gmt":"2026-04-25T15:20:39","slug":"installer-ora2pg-sur-ubuntu","status":"publish","type":"post","link":"https:\/\/rootfan.com\/fr\/ora2pg-install-ubuntu\/","title":{"rendered":"Comment installer ora2pg sur Ubuntu et g\u00e9n\u00e9rer un rapport d'\u00e9valuation de migration"},"content":{"rendered":"<p><strong>TL;DR :<\/strong> L'installation d'ora2pg sur Ubuntu 24.04 n\u00e9cessite trois composants : Oracle Instant Client 19c (pour les biblioth\u00e8ques de connexion Oracle), le module Perl DBD::Oracle (qui se lie \u00e0 ces biblioth\u00e8ques) et ora2pg lui-m\u00eame (install\u00e9 \u00e0 partir des sources \u2014 il n'est pas sur CPAN). Une fois install\u00e9s, une seule commande se connecte \u00e0 votre base de donn\u00e9es Oracle, analyse chaque objet du sch\u00e9ma et produit un rapport HTML avec un score de complexit\u00e9 et une estimation de l'effort en jours-homme. Ce post couvre l'installation compl\u00e8te et la commande de g\u00e9n\u00e9ration de rapport.<\/p>\n\n\n\n<!--more-->\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>La fa\u00e7on la plus rapide de savoir si une migration d'Oracle vers PostgreSQL est un travail d'une semaine ou un projet de trois mois est de g\u00e9n\u00e9rer le rapport de migration ora2pg avant d'ouvrir une feuille de calcul. <\/p>\n\n\n\n<p>Le rapport se connecte \u00e0 Oracle, compte chaque objet par type, \u00e9value le sch\u00e9ma de A (simple) \u00e0 C (complexe) et produit une estimation de l'effort en jours-homme. <\/p>\n\n\n\n<p>Cela prend environ vingt minutes \u00e0 installer et soixante secondes \u00e0 ex\u00e9cuter.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table des mati\u00e8res<\/h2><nav><ul><li><a href=\"#what-the-migration-report-produces\">Ce que le Rapport de migration produit<\/a><\/li><li><a href=\"#prerequisites\">Pr\u00e9requis<\/a><\/li><li><a href=\"#step-1-install-oracle-instant-client-on-ubuntu-24-04\">\u00c9tape 1 : Installer Oracle Instant Client sur Ubuntu 24.04<\/a><\/li><li><a href=\"#step-2-install-dbd-oracle-and-ora-2-pg\">\u00c9tape 2 : Installer DBD::Oracle et ora2pg<\/a><\/li><li><a href=\"#step-3-configure-the-connection\">\u00c9tape 3 : Configurer la connexion<\/a><\/li><li><a href=\"#step-4-run-the-migration-assessment-report\">\u00c9tape 4 : Ex\u00e9cuter le Rapport d'\u00c9valuation de la Migration<\/a><\/li><li><a href=\"#step-5-read-the-report-output\">\u00c9tape 5 : Lire les r\u00e9sultats du rapport<\/a><\/li><li><a href=\"#step-6-adjust-the-effort-estimate\">\u00c9tape 6 : Ajuster l'estimation de l'effort<\/a><\/li><li><a href=\"#frequently-asked-questions\">Foire aux questions<\/a><\/li><li><a href=\"#in-summary\">En r\u00e9sum\u00e9<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-the-migration-report-produces\">Ce que le Rapport de migration produit<\/h2>\n\n\n\n<p>La commande ora2pg SHOW_REPORT se connecte \u00e0 votre base de donn\u00e9es Oracle, analyse chaque objet du sch\u00e9ma et produit un tableau avec cinq colonnes : type d'objet, nombre d'objets, nombre d'objets invalides, co\u00fbt de migration estim\u00e9 en unit\u00e9s et commentaires sur ce que fera ora2pg avec chaque type. <\/p>\n\n\n\n<p>La derni\u00e8re ligne donne un co\u00fbt total et une estimation d'effort lisible par l'homme : \u201c22,40 unit\u00e9s de co\u00fbt de migration signifient approximativement 1 jour(s)-homme.\". <\/p>\n\n\n\n<p>L'unit\u00e9 de migration \u00e9tait r\u00e9gl\u00e9e sur 5 minute(s).\u201d<\/p>\n\n\n\n<p>Le score se compose de deux parties : une lettre et un chiffre.<\/p>\n\n\n\n<p>La lettre refl\u00e8te une complexit\u00e9 globale :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A<\/strong> \u2014 migration qui peut \u00eatre largement automatis\u00e9e<\/li>\n\n\n\n<li><strong>B<\/strong> \u2014 Migration avec r\u00e9\u00e9criture de code ; co\u00fbt estim\u00e9 jusqu'\u00e0 10 jours-homme<\/li>\n\n\n\n<li><strong>C<\/strong> \u2014 migration avec r\u00e9\u00e9criture de code ; co\u00fbt estim\u00e9 sup\u00e9rieur \u00e0 10 jours-homme<\/li>\n<\/ul>\n\n\n\n<p>Le nombre refl\u00e8te la difficult\u00e9 technique :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>1<\/strong> \u2014 aucune fonction stock\u00e9e, aucun d\u00e9clencheur<\/li>\n\n\n\n<li><strong>2<\/strong> \u2014 d\u00e9clencheurs pr\u00e9sents, aucune r\u00e9\u00e9criture manuelle requise<\/li>\n\n\n\n<li><strong>3<\/strong> \u2014 fonctions stock\u00e9es et\/ou d\u00e9clencheurs, aucune r\u00e9\u00e9criture manuelle requise<\/li>\n\n\n\n<li><strong>4<\/strong> \u2014 d\u00e9clencheurs ou vues n\u00e9cessitant une r\u00e9\u00e9criture de code<\/li>\n\n\n\n<li><strong>5<\/strong> \u2014 fonctions stock\u00e9es et\/ou d\u00e9clencheurs qui n\u00e9cessitent une r\u00e9\u00e9criture du code<\/li>\n<\/ul>\n\n\n\n<p>Un sch\u00e9ma sans code stock\u00e9 obtient un score A-1. Un sch\u00e9ma avec des packages PL\/SQL, des d\u00e9clencheurs et des vues sp\u00e9cifiques \u00e0 Oracle obtient g\u00e9n\u00e9ralement un score B-4 ou B-5. <\/p>\n\n\n\n<p>Le niveau C est d\u00e9clench\u00e9 lorsque l'effort estim\u00e9 d\u00e9passe 10 jours-personne (r\u00e9glable avec <code>--journ\u00e9es_humaines_limite<\/code>).<\/p>\n\n\n\n<p>Ex\u00e9cutez le rapport avant de vous engager sur un calendrier. <\/p>\n\n\n\n<p>Le nombre qu'il produit est le seul nombre \u00e0 conna\u00eetre avant le d\u00e9but du projet.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequisites\">Pr\u00e9requis<\/h2>\n\n\n\n<p>Trois choses sont n\u00e9cessaires, dans l'ordre de d\u00e9pendance :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Client Oracle Instant 19c<\/strong> \u2014 les biblioth\u00e8ques C (<code>libclntsh.so<\/code> et associ\u00e9s) auxquels le pilote Perl se lie au moment de la compilation et qu'il charge au moment de l'ex\u00e9cution. Sans eux, aucune connexion Oracle n'est possible, quel que soit l'acc\u00e8s r\u00e9seau.<\/li>\n\n\n\n<li><strong>DBD::Oracle<\/strong> \u2014 le module Perl qui fournit le pilote Oracle. Il se compile avec les en-t\u00eates d'Instant Client lors de l'installation \u2014 le paquet devel est requis, pas seulement le runtime de base.<\/li>\n\n\n\n<li><strong>ora2pg 25.0<\/strong> \u2014 install\u00e9 \u00e0 partir des sources via son fichier tarball de version GitHub. ora2pg n'est pas disponible sur CPAN ; <code>cpanm ora2pg<\/code> \u00e9chouera.<\/li>\n<\/ol>\n\n\n\n<p>Vous avez \u00e9galement besoin d'un acc\u00e8s r\u00e9seau depuis la machine Ubuntu \u00e0 la base de donn\u00e9es Oracle sur le port 1521 et d'un utilisateur de base de donn\u00e9es disposant des privil\u00e8ges suffisants pour analyser le sch\u00e9ma (d\u00e9tails dans la FAQ ci-dessous).<\/p>\n\n\n\n<p>Si votre serveur Oracle n'est pas dans le DNS, ajoutez-le au <code>\/etc\/hosts<\/code> sur la machine Ubuntu avant de continuer :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo vi \/etc\/hosts\n# Add: 192.168.x.x   your-oracle-host.localdomain   your-oracle-host\n<\/pre><\/div>\n\n\n<p>V\u00e9rifiez la r\u00e9solution de nom avant de continuer :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nping -c 2 your-oracle-host.localdomain\n<\/pre><\/div>\n\n\n<p>Si le ping \u00e9choue, les tests de connectivit\u00e9 de l'\u00e9tape 3 \u00e9choueront \u00e9galement \u2014 r\u00e9parez le DNS ou <code>\/etc\/hosts<\/code> premier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-1-install-oracle-instant-client-on-ubuntu-24-04\">\u00c9tape 1 : Installer Oracle Instant Client sur Ubuntu 24.04<\/h2>\n\n\n\n<p>Oracle distribue Instant Client sous forme de paquets RPM uniquement. <\/p>\n\n\n\n<p>Ubuntu utilise des paquets DEB. <\/p>\n\n\n\n<p>Le <code>\u00e9tranger<\/code> l'outil convertit les RPM en DEB \u2014 il g\u00e8re la traduction des m\u00e9tadonn\u00e9es du paquet afin que les fichiers se retrouvent dans les bons chemins et que le gestionnaire de paquets suive l'installation.<\/p>\n\n\n\n<p>T\u00e9l\u00e9chargez trois paquets depuis <a href=\"https:\/\/www.oracle.com\/database\/technologies\/instant-client\/linux-x86-64-downloads.html\" rel=\"nofollow noopener\" target=\"_blank\">T\u00e9l\u00e9chargements d'Oracle Instant Client<\/a> page \u2014 utilisez les RPM g\u00e9n\u00e9riques Linux x86-64 pour la version 19.30, pas les variantes OL8 ou OL9 (celles-ci sont compil\u00e9es pour les syst\u00e8mes de la famille Red Hat et ont des d\u00e9pendances diff\u00e9rentes) :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>oracle-instantclient19.30-basic-*.rpm<\/code> \u2014 les biblioth\u00e8ques partag\u00e9es d'ex\u00e9cution compl\u00e8te (<code>libclntsh.so<\/code>, <code>libnnz19.so<\/code>, et autres)<\/li>\n\n\n\n<li><code>oracle-instantclient19.30-d\u00e9veloppeur-*.rpm<\/code> \u2014 fichiers d'en-t\u00eate et le <code>sdk\/<\/code> r\u00e9pertoire requis pour compiler DBD::Oracle<\/li>\n\n\n\n<li><code>oracle-instantclient19.30-sqlplus-*.rpm<\/code> le <code>sqlplus64<\/code> binaire pour tester la connectivit\u00e9 Oracle ind\u00e9pendamment d'ora2pg<\/li>\n<\/ul>\n\n\n\n<p>Transf\u00e9rez les trois RPM sur votre machine Ubuntu, puis ex\u00e9cutez\u00a0:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# libaio1t64: the async I\/O library required by Oracle Instant Client at runtime\n# On Ubuntu 24.04 the package name is libaio1t64, not libaio1 -- the name changed in this release\n# alien: converts RPM packages to DEB format for installation with dpkg\nsudo apt-get install -y libaio1t64 alien\n\n# Convert each RPM to DEB and install in one step (-i: convert and install immediately)\nsudo alien -i oracle-instantclient19.30-basic-*.rpm\nsudo alien -i oracle-instantclient19.30-devel-*.rpm\nsudo alien -i oracle-instantclient19.30-sqlplus-*.rpm\n<\/pre><\/div>\n\n\n<p><strong>Correction de lien symbolique Ubuntu 24.04 :<\/strong> Ubuntu 24.04 exp\u00e9die la biblioth\u00e8que d'E\/S asynchrones comme <code>libaio.so.1t64<\/code> dans le cadre de la transition vers time_t 64 bits. <\/p>\n\n\n\n<p>Oracle Instant Client a \u00e9t\u00e9 compil\u00e9 sur des syst\u00e8mes Red Hat et utilise en dur <code>libaio.so.1<\/code> dans son binaire ELF. <\/p>\n\n\n\n<p>Sans lien symbolique, <code>sqlplus64<\/code> \u00e9choue imm\u00e9diatement avec <code>impossible d'ouvrir le fichier d'objet partag\u00e9 : libaio.so.1<\/code>. <\/p>\n\n\n\n<p>Cr\u00e9ez le lien symbolique avant de tester\u00a0:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo ln -s \/usr\/lib\/x86_64-linux-gnu\/libaio.so.1t64 \/usr\/lib\/x86_64-linux-gnu\/libaio.so.1\n<\/pre><\/div>\n\n\n<p>D\u00e9finissez les trois variables d'environnement requises et enregistrez-les de mani\u00e8re persistante pour <code>~\/.bashrc<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nexport ORACLE_HOME=\/usr\/lib\/oracle\/19.30\/client64\nexport LD_LIBRARY_PATH=$ORACLE_HOME\/lib\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\necho &#039;export ORACLE_HOME=\/usr\/lib\/oracle\/19.30\/client64&#039; &gt;&gt; ~\/.bashrc\necho &#039;export LD_LIBRARY_PATH=$ORACLE_HOME\/lib&#039; &gt;&gt; ~\/.bashrc\necho &#039;export PATH=$ORACLE_HOME\/bin:$PATH&#039; &gt;&gt; ~\/.bashrc\n<\/pre><\/div>\n\n\n<p><code>ORACLE_HOME<\/code> indique \u00e0 DBD::Oracle et ora2pg o\u00f9 le client instantan\u00e9 est install\u00e9 \u2014 les deux outils lisent ceci au moment de la construction et au moment de l'ex\u00e9cution. <\/p>\n\n\n\n<p><code>LD_LIBRARY_PATH<\/code> indique \u00e0 l'\u00e9diteur de liens dynamique de Linux o\u00f9 trouver les biblioth\u00e8ques partag\u00e9es d'Oracle \u2014 sans cela, tout binaire qui se lie \u00e0 <code>libclntsh.so<\/code> \u00e9choue avec \u201cerreur lors du chargement des biblioth\u00e8ques partag\u00e9es\u201d. <\/p>\n\n\n\n<p><code>CHEMIN<\/code> ajoute le r\u00e9pertoire bin d'Instant Client pour <code>sqlplus64<\/code> est disponible sur la ligne de commande.<\/p>\n\n\n\n<p>V\u00e9rifier l'installation :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsqlplus64 -V\n# Expected: SQL*Plus: Release 19.30.0.0.0 Production\n<\/pre><\/div>\n\n\n<p>Si cette commande \u00e9choue avec une erreur de biblioth\u00e8que apr\u00e8s le lien symbolique, v\u00e9rifiez que <code>LD_LIBRARY_PATH<\/code> est export\u00e9e (pas seulement d\u00e9finie) dans le shell actuel.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-2-install-dbd-oracle-and-ora-2-pg\">\u00c9tape 2 : Installer DBD::Oracle et ora2pg<\/h2>\n\n\n\n<p>DBD::Oracle est le pilote de base de donn\u00e9es Perl pour Oracle. C'est un module d'extension C \u2014 il se compile \u00e0 partir des sources contre les en-t\u00eates Instant Client lors de l'installation. <\/p>\n\n\n\n<p>C'est pourquoi <code>ORACLE_HOME<\/code> doit \u00eatre export\u00e9 avant l'ex\u00e9cution <code>cpanm DBD::Oracle<\/code>le script de compilation lit cette variable pour localiser les en-t\u00eates et lier les biblioth\u00e8ques partag\u00e9es.<\/p>\n\n\n\n<p>Installez d'abord les d\u00e9pendances de compilation :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# perl: the Perl runtime (may already be present on Ubuntu 24.04)\n# cpanminus: a lightweight CPAN module installer -- simpler than the full CPAN shell\n# make, gcc: required to compile DBD::Oracle from C source\nsudo apt-get install -y perl cpanminus make gcc\n<\/pre><\/div>\n\n\n<p>Puis installez DBD::Oracle \u2014 <code>ORACLE_HOME<\/code> et <code>LD_LIBRARY_PATH<\/code> doit \u00eatre export\u00e9 dans le shell actuel avant d'ex\u00e9cuter ceci :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo cpanm DBD::Oracle\n<\/pre><\/div>\n\n\n<p>La compilation prend 2 \u00e0 3 minutes. Si elle \u00e9choue avec un message indiquant que des en-t\u00eates sont manquants, v\u00e9rifiez que le RPM de d\u00e9veloppement a \u00e9t\u00e9 install\u00e9 et que <code>ORACLE_HOME<\/code> pointe vers le r\u00e9pertoire correct.<\/p>\n\n\n\n<p>Installez maintenant ora2pg \u00e0 partir de la tarball de publication GitHub. ora2pg n'est pas disponible sur CPAN \u2014 <code>cpanm ora2pg<\/code> \u00e9chouera avec \u201c module introuvable \u201d. <\/p>\n\n\n\n<p>La seule installation prise en charge est \u00e0 partir des sources :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nwget https:\/\/github.com\/darold\/ora2pg\/archive\/refs\/tags\/v25.0.tar.gz\ntar xzf v25.0.tar.gz\ncd ora2pg-25.0\n\n# Makefile.PL generates the Makefile based on the system Perl configuration\nperl Makefile.PL\n\n# make compiles and prepares the distribution\nmake\n\n# make install copies the ora2pg script and Perl modules to the system Perl paths\nsudo make install\n\ncd ..\n<\/pre><\/div>\n\n\n<p>V\u00e9rifier :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nora2pg --version\n# Expected: Ora2Pg v25.0\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-3-configure-the-connection\">\u00c9tape 3 : Configurer la connexion<\/h2>\n\n\n\n<p>ora2pg lit <code>\/etc\/ora2pg\/ora2pg.conf<\/code> par d\u00e9faut. <\/p>\n\n\n\n<p>L'installation cr\u00e9e <code>\/etc\/ora2pg\/ora2pg.conf.dist<\/code> en tant que fichier de r\u00e9f\u00e9rence fortement comment\u00e9 avec tous les param\u00e8tres disponibles document\u00e9s. <\/p>\n\n\n\n<p>Copiez-le pour cr\u00e9er votre configuration de travail \u2014 le fichier dist sert de sauvegarde de base :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo cp \/etc\/ora2pg\/ora2pg.conf.dist \/etc\/ora2pg\/ora2pg.conf\nsudo vi \/etc\/ora2pg\/ora2pg.conf\n<\/pre><\/div>\n\n\n<p>Le fichier dist est long (plus de 1 000 lignes de commentaires et de param\u00e8tres). <\/p>\n\n\n\n<p>Utilisation <code>\/ORACLE_DSN<\/code> Dans vi, pour sauter directement \u00e0 chaque param\u00e8tre \u2014 ne faites pas d\u00e9filer manuellement.<\/p>\n\n\n\n<p>D\u00e9finissez ces cinq param\u00e8tres :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nORACLE_DSN     dbi:Oracle:host=YOUR_ORACLE_HOST;service_name=YOUR_PDB_NAME;port=1521\nORACLE_USER    system\nORACLE_PWD     YOUR_SYSTEM_PASSWORD\nSCHEMA         YOUR_SCHEMA_NAME\nOUTPUT_DIR     \/home\/YOUR_USER\/ora2pg-output\n<\/pre><\/div>\n\n\n<p><strong><code>ORACLE_DSN<\/code>:<\/strong> Utilisation <code>nom_du_service<\/code>, pas <code>sid<\/code>. Oracle 19c organise les bases de donn\u00e9es en bases de donn\u00e9es conteneurs (CDB) avec une ou plusieurs bases de donn\u00e9es enfichables (PDB). <code>sid=ORCL<\/code> se connecte \u00e0 la racine de la CDB \u2014 votre sch\u00e9ma d'application n'y existe pas. <code>service_name=VOTRE_NOM_PDB<\/code> se connecte \u00e0 la PDB o\u00f9 r\u00e9side votre sch\u00e9ma. Le nom du service PDB est visible dans <code>lsnrctl status<\/code> sur le serveur Oracle.<\/p>\n\n\n\n<p><strong><code>ORACLE_USER<\/code>:<\/strong> Connectez-vous en tant que SYSTEM ou un autre utilisateur DBA, et non en tant que propri\u00e9taire du sch\u00e9ma. Le propri\u00e9taire du sch\u00e9ma n'a g\u00e9n\u00e9ralement pas <code>SELECT SUR v$base de donn\u00e9es<\/code>, ce qui provoque l'\u00e9chec de la commande SHOW_REPORT. L'utilisation de SYSTEM \u00e9vite les probl\u00e8mes de privil\u00e8ges pendant la phase d'\u00e9valuation.<\/p>\n\n\n\n<p><strong><code>Sch\u00e9ma<\/code>:<\/strong> Limite l'analyse \u00e0 un seul sch\u00e9ma. Sans cela, ora2pg analyse tous les sch\u00e9mas de la base de donn\u00e9es, ce qui augmente consid\u00e9rablement le temps d'analyse et produit un rapport qui m\u00e9lange tous les objets des sch\u00e9mas.<\/p>\n\n\n\n<p><strong><code>R\u00c9PERTOIRE_DE_SORTIE<\/code>:<\/strong> Le r\u00e9pertoire o\u00f9 ora2pg \u00e9crit les fichiers d'exportation. Ce r\u00e9pertoire doit exister avant de lancer toute commande ora2pg \u2014 ora2pg ne le cr\u00e9e pas automatiquement.<\/p>\n\n\n\n<p>Cr\u00e9ez le r\u00e9pertoire de sortie :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nmkdir -p ~\/ora2pg-output\n<\/pre><\/div>\n\n\n<p>Ex\u00e9cutez deux tests de connectivit\u00e9 avant de passer au rapport. <\/p>\n\n\n\n<p>Les tests v\u00e9rifient diff\u00e9rentes couches de la pile \u2014 la r\u00e9ussite des deux confirme que l'ensemble de la cha\u00eene, d'Ubuntu \u00e0 Oracle, fonctionne correctement :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# Test 1: sqlplus64 -- verifies Instant Client libraries, network routing, and Oracle listener\nsqlplus64 YOUR_USER\/YOUR_PASSWORD@\/\/YOUR_ORACLE_HOST:1521\/YOUR_PDB_NAME\n# Expected: Connected to: Oracle Database 19c Enterprise Edition ...\n# Type &quot;exit&quot; to leave the SQL*Plus prompt\n\n# Test 2: ora2pg SHOW_VERSION -- verifies ora2pg connects to Oracle via DBD::Oracle\nora2pg -t SHOW_VERSION\n# Expected: Oracle Database 19c Enterprise Edition Release 19.x.x.x.x\n\n# If test 1 fails: check the Oracle listener with &quot;lsnrctl status&quot; on the Oracle server\n# and confirm port 1521 is open between the two machines.\n# If test 2 fails but test 1 passes: check that LD_LIBRARY_PATH is exported (not just set)\n# in the current shell.\n<\/pre><\/div>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si la connectivit\u00e9 fonctionne mais que vous ne savez pas comment interpr\u00e9ter les r\u00e9sultats du rapport \u2014 ou si le score est de niveau C et que vous avez besoin d'un deuxi\u00e8me avis sur la port\u00e9e \u2014 <a href=\"https:\/\/rootfan.com\/fr\/services\/\">une \u00e9valuation \u00e0 forfait couvre exactement cela<\/a><\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-4-run-the-migration-assessment-report\">\u00c9tape 4 : Ex\u00e9cuter le Rapport d'\u00c9valuation de la Migration<\/h2>\n\n\n\n<p>Avant d'ex\u00e9cuter le rapport, recueillez des statistiques fra\u00eeches sur le sch\u00e9ma Oracle. ora2pg d\u00e9rive ses d\u00e9comptes de lignes et ses estimations de co\u00fbts des statistiques stock\u00e9es dans le dictionnaire de donn\u00e9es d'Oracle. <\/p>\n\n\n\n<p>Si les statistiques sont obsol\u00e8tes \u2014 ce qui est courant sur les sch\u00e9mas qui n'ont pas \u00e9t\u00e9 analys\u00e9s r\u00e9cemment \u2014 les d\u00e9comptes de lignes seront inexacts et l'estimation de l'effort sera peu fiable.<\/p>\n\n\n\n<p>Ex\u00e9cutez ceci sur le serveur Oracle en tant que SYSTEM ou SYSDBA :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nBEGIN\n  DBMS_STATS.GATHER_SCHEMA_STATS(&#039;YOUR_SCHEMA&#039;);\n  DBMS_STATS.GATHER_DATABASE_STATS;\n  DBMS_STATS.GATHER_DICTIONARY_STATS;\nEND;\n\/\n-- Expected: PL\/SQL procedure successfully completed.\n<\/pre><\/div>\n\n\n<p><code>GATHER_SCHEMA_STATS<\/code> met \u00e0 jour les statistiques pour le sch\u00e9ma cible. <code>RECUEILLIR_STATISTIQUES_BASE_DE_DONN\u00c9ES<\/code> met \u00e0 jour les statistiques de tous les objets de la base de donn\u00e9es. <\/p>\n\n\n\n<p><code>STATISTIQUES_RECUEILLIES_DICTIONNAIRE<\/code> met \u00e0 jour les vues du dictionnaire de donn\u00e9es Oracle que ora2pg lit pendant l'analyse. <\/p>\n\n\n\n<p>Sur une base de donn\u00e9es volumineuse, ce bloc peut prendre plusieurs minutes alors que sur un sch\u00e9ma de petite taille comme HR, il s'ex\u00e9cute en quelques secondes.<\/p>\n\n\n\n<p>Puis ex\u00e9cutez le rapport depuis Ubuntu :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# HTML version -- recommended for reading the report\nora2pg -t SHOW_REPORT --estimate_cost --dump_as_html &gt; ~\/ora2pg-output\/migration_report.html\n# SHOW_REPORT: connects to Oracle and counts every object by type in the schema\n# --estimate_cost: calculates a complexity score and converts the total units to person-days\n# --dump_as_html: formats the output as an HTML table -- open in a browser\n\n# Plain text version -- useful for scripting or sending the report by email\nora2pg -t SHOW_REPORT --estimate_cost &gt; ~\/ora2pg-output\/migration_report.txt\n<\/pre><\/div>\n\n\n<p>Ouvrir <code>rapport_migration.html<\/code> dans un navigateur. <\/p>\n\n\n\n<p>La version texte brut est difficile \u00e0 lire car les colonnes ne sont pas align\u00e9es \u2014 la version HTML formate le tableau proprement et c'est celle \u00e0 partager avec les parties prenantes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-5-read-the-report-output\">\u00c9tape 5 : Lire les r\u00e9sultats du rapport<\/h2>\n\n\n\n<p>Le rapport donne une ligne par type d'objet. <\/p>\n\n\n\n<p>Les colonnes sont : type d'objet, nombre d'objets, nombre d'objets invalides, co\u00fbt estim\u00e9 en unit\u00e9s de migration, et un champ de commentaires expliquant ce que ora2pg fera avec chaque type.<\/p>\n\n\n\n<p>Faites attention \u00e0 quatre choses :<\/p>\n\n\n\n<p><strong>Le niveau de migration<\/strong> \u2014 indiqu\u00e9 en haut du rapport par une lettre et un chiffre (par exemple, B-5). Les sch\u00e9mas A-1 et A-2 n'ont pas de code stock\u00e9 et migrent en grande partie automatiquement. Les sch\u00e9mas B-4 et B-5 ont des proc\u00e9dures stock\u00e9es ou des d\u00e9clencheurs qui n\u00e9cessitent une r\u00e9\u00e9criture manuelle en PL\/pgSQL. Les sch\u00e9mas de niveau C d\u00e9passent le seuil de personnes-jour et n\u00e9cessitent une port\u00e9e de projet formelle avant de s'engager dans un calendrier.<\/p>\n\n\n\n<p><strong>Les lignes pour FUNCTION, PROCEDURE, PACKAGE et TRIGGER<\/strong> \u2013 c'est l\u00e0 que l'effort manuel se concentre. Les tables, les s\u00e9quences et les index migrent avec un minimum de travail manuel. Le code stock\u00e9, non \u2013 chaque fonction, proc\u00e9dure et d\u00e9clencheur doit \u00eatre examin\u00e9 et r\u00e9\u00e9crit. Un sch\u00e9ma avec 200 tables et z\u00e9ro proc\u00e9dure stock\u00e9e migre plus rapidement qu'un sch\u00e9ma avec 50 tables et 30 proc\u00e9dures stock\u00e9es. Les d\u00e9comptes d'objets dans ces lignes sont les chiffres les plus importants du rapport.<\/p>\n\n\n\n<p><strong>Le nombre d'objets non valides<\/strong> \u2014 la troisi\u00e8me colonne du tableau. Tout objet qu'Oracle marque lui-m\u00eame comme invalide (d\u00e9pendances rompues, erreurs de compilation) ne sera pas export\u00e9 proprement. Corrigez les objets invalides dans Oracle avant d'ex\u00e9cuter une quelconque exportation \u2014 ne les int\u00e9grez pas dans la migration.<\/p>\n\n\n\n<p><strong>La colonne des commentaires<\/strong> \u2014 ora2pg explique ce qu'il fera avec chaque type d'objet et signale les probl\u00e8mes connus. Lisez attentivement les commentaires TRIGGER : les triggers BEFORE INSERT bas\u00e9s sur des s\u00e9quences (utilis\u00e9s pour simuler l'auto-incr\u00e9mentation dans Oracle) sont export\u00e9s en PL\/pgSQL mais devraient \u00eatre remplac\u00e9s par PostgreSQL <code>IDENTIT\u00c9<\/code> colonnes ou <code>g\u00e9n\u00e9r\u00e9 toujours comme identit\u00e9<\/code>, ce qui n\u00e9cessite une d\u00e9cision d\u00e9lib\u00e9r\u00e9e lors de la migration.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-6-adjust-the-effort-estimate\">\u00c9tape 6 : Ajuster l'estimation de l'effort<\/h2>\n\n\n\n<p>L'unit\u00e9 de co\u00fbt par d\u00e9faut est de 5 minutes par unit\u00e9 de migration. <\/p>\n\n\n\n<p>Ce chiffre suppose qu'un consultant ayant de l'exp\u00e9rience avec PostgreSQL effectue le travail de r\u00e9\u00e9criture. <\/p>\n\n\n\n<p>C'est une base raisonnable pour l'\u00e9valuation, mais deux param\u00e8tres vous permettent de l'ajuster pour qu'elle corresponde \u00e0 l'\u00e9quipe r\u00e9elle et \u00e0 l'app\u00e9tit pour le risque.<\/p>\n\n\n\n<p><strong><code>--valeur_unit\u00e9_co\u00fbt<\/code><\/strong> modifie le nombre de minutes par unit\u00e9. La valeur par d\u00e9faut est de 5. Pour une \u00e9quipe interne qui effectue sa premi\u00e8re migration Oracle \u2192 PostgreSQL, doubler \u00e0 10 minutes par unit\u00e9 est plus r\u00e9aliste \u2014 les migrations pour la premi\u00e8re fois prennent toujours plus de temps que ce que l'outil sugg\u00e8re en raison de la syntaxe inconnue, des cycles de test et des cas limites :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nora2pg -t SHOW_REPORT --estimate_cost --cost_unit_value 10 --dump_as_html &gt; ~\/ora2pg-output\/migration_report.html\n# --cost_unit_value 10: each unit = 10 minutes instead of 5\n# The person-day total doubles -- use this when the team has no prior migration experience\n<\/pre><\/div>\n\n\n<p><strong><code>--journ\u00e9es_humaines_limite<\/code><\/strong> d\u00e9finit le seuil au-dessus duquel le sch\u00e9ma est class\u00e9 comme niveau C. La valeur par d\u00e9faut est de 10 jours-homme. L'abaisser \u00e0 5 est utile lorsque vous souhaitez \u00eatre plus prudent, par exemple, lorsque vous pr\u00e9sentez le rapport \u00e0 un client qui doit budg\u00e9tiser les travaux :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nora2pg -t SHOW_REPORT --estimate_cost --human_days_limit 5 --dump_as_html &gt; ~\/ora2pg-output\/migration_report.html\n# --human_days_limit 5: any schema above 5 person-days is classified as C-level\n# The underlying unit counts do not change -- only the letter classification changes\n<\/pre><\/div>\n\n\n<p>Les deux drapeaux peuvent \u00eatre combin\u00e9s :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nora2pg -t SHOW_REPORT --estimate_cost --cost_unit_value 10 --human_days_limit 5 --dump_as_html &gt; ~\/ora2pg-output\/migration_report.html\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"frequently-asked-questions\">Foire aux questions<\/h2>\n\n\n\n<p><strong>Quels privil\u00e8ges Oracle l'utilisateur ora2pg n\u00e9cessite-t-il ?<\/strong><\/p>\n\n\n\n<p>Pour un utilisateur non-dba, les octrois minimums sont :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nGRANT CONNECT TO ora2pg_user;\nGRANT SELECT ANY DICTIONARY TO ora2pg_user;\nGRANT SELECT ON v_$database TO ora2pg_user;\n<\/pre><\/div>\n\n\n<p><code>S\u00e9lectionner n'importe quel dictionnaire<\/code> couvre le <code>DBA_*<\/code> vues de dictionnaire de donn\u00e9es statiques qu'ora2pg interroge pour le nombre d'objets. <code>SELECT ON v_$base de donn\u00e9es<\/code> couvre le <code>V$<\/code> les vues de performance dynamique \u2014 il s'agit d'un type d'objet distinct dans Oracle et n\u00e9cessitent une autorisation explicite m\u00eame lorsque <code>S\u00e9lectionner n'importe quel dictionnaire<\/code> est d\u00e9j\u00e0 accord\u00e9e. Les deux subventions sont requises; aucune n'en rend l'autre superflue.<\/p>\n\n\n\n<p>Ensemble <code>USER_GRANTS 1<\/code> en <code>ora2pg.conf<\/code> pour dire \u00e0 ora2pg de requ\u00eater <code>UTILISATEUR_*<\/code> vues plut\u00f4t que <code>DBA_*<\/code> vues lors de la connexion en tant que propri\u00e9taire du sch\u00e9ma. Pour la plupart des \u00e9valuations, se connecter en tant que SYSTEM est plus simple et \u00e9vite compl\u00e8tement les probl\u00e8mes de privil\u00e8ges.<\/p>\n\n\n\n<p><strong>Ora2pg fonctionne-t-il avec les bases de donn\u00e9es enfichables Oracle 19c ?<\/strong><\/p>\n\n\n\n<p>Oui, mais vous devez utiliser <code>nom_du_service<\/code> dans la DSN, pas <code>sid<\/code>. <code>sid=ORCL<\/code> se connecte \u00e0 la racine de la CDB o\u00f9 vos sch\u00e9mas d'application n'existent pas. Utiliser <code>service_name=VOTRE_NOM_PDB<\/code> \u2014 le nom du service PDB est visible dans <code>lsnrctl status<\/code> sur le serveur Oracle.<\/p>\n\n\n\n<p><strong>Le rapport r\u00e9v\u00e8le une estimation de co\u00fbts \u00e9lev\u00e9e. Qu'est-ce que cela signifie pour la migration ?<\/strong><\/p>\n\n\n\n<p>A high estimate means the schema has significant PL\/SQL \u2014 stored procedures, packages, and triggers that require manual rewriting. The report does not mean migration is impossible; it means the rewriting work needs to be scoped and resourced properly. In my experience, a C-level schema with 50\u2013100 person-days of estimated effort is a 6\u20138 week engagement with the right approach \u2014 not a reason to abandon the project. The estimate is a starting point for scoping, not a final answer.<\/p>\n\n\n\n<p><strong>Puis-je ex\u00e9cuter le rapport sans me connecter \u00e0 une base de donn\u00e9es Oracle active ?<\/strong><\/p>\n\n\n\n<p>Non. SHOW_REPORT se connecte au dictionnaire de donn\u00e9es Oracle pour compter les objets et lire les statistiques. Il ne peut pas fonctionner hors ligne ou avec un fichier d'exportation. La base de donn\u00e9es doit \u00eatre en cours d'ex\u00e9cution et accessible sur le port 1521 depuis la machine Ubuntu.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"in-summary\">En r\u00e9sum\u00e9<\/h2>\n\n\n\n<p>L'installation d'ora2pg sur Ubuntu 24.04 n\u00e9cessite trois composants dans l'ordre des d\u00e9pendances : Oracle Instant Client 19.30 (install\u00e9 via <code>\u00e9tranger<\/code> des paquets RPM Oracle), DBD::Oracle (compil\u00e9 depuis les sources via <code>cpanminus<\/code>), et ora2pg 25.0 (install\u00e9 depuis l'archive GitHub \u2014 non disponible sur CPAN).<\/p>\n\n\n\n<p>Une fois install\u00e9, la commande d'\u00e9valuation est sur une seule ligne :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nora2pg -t SHOW_REPORT --estimate_cost --dump_as_html &gt; ~\/ora2pg-output\/migration_report.html\n<\/pre><\/div>\n\n\n<p>La sortie donne un score de complexit\u00e9 (A\/B\/C + 1\u20135) et une estimation de l'effort en jours-homme. Ex\u00e9cutez-la avant de vous engager sur un calendrier de migration \u2013 le num\u00e9ro qu'elle produit est le chiffre unique qui d\u00e9termine la port\u00e9e et les ressources du projet.<\/p>\n\n\n\n<p>Si le rapport revient au niveau B-5 ou C, et que vous avez besoin d'aide pour interpr\u00e9ter les r\u00e9sultats ou d\u00e9finir le travail manuel, <a href=\"https:\/\/rootfan.com\/fr\/services\/\">prendre contact \u2192<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Un guide \u00e9tape par \u00e9tape pour installer ora2pg sur Ubuntu 24.04 et ex\u00e9cuter l'\u00e9valuation de migration SHOW_REPORT. Couvre Oracle Instant Client, DBD::Oracle, ora2pg depuis les sources, et comment lire le score de complexit\u00e9 et l'estimation de l'effort.<\/p>","protected":false},"author":1,"featured_media":6819,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_focus_keyword":"how to install ora2pg on ubuntu","rank_math_title":"","rank_math_description":"How to install ora2pg on Ubuntu 24.04, connect to Oracle, and run the migration assessment report. Get your schema complexity score and effort estimate in under 20 minutes.","rank_math_robots":"","rank_math_og_title":"","rank_math_og_description":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[146],"tags":[137],"class_list":["post-6814","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle-to-postgresql","tag-migration"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/rootfan.com\/wp-content\/uploads\/5638320778_076e33a851.jpg?fit=500%2C345&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts\/6814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/comments?post=6814"}],"version-history":[{"count":7,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts\/6814\/revisions"}],"predecessor-version":[{"id":6823,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts\/6814\/revisions\/6823"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/media\/6819"}],"wp:attachment":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/media?parent=6814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/categories?post=6814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/tags?post=6814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}