EDB*Plus & Migration Toolkit
Installation, Configuration et Mise en oeuvre des Utilitaires EDB
Cet article fournit un guide pour effectuer la mise en œuvre des utilitaires EDB*Plus version 36 et EDB Postgres Migration Toolkit version 53.0.1 du logiciel de gestion de base de données EDB Postgres dans l'environnement Linux RHEL/CentOS/OL (RedHat Enterprise Linux/Community enterprise Operating System/Oracle Linux) :
- Introduction
- Pré-requis
- Mise en œuvre d'EDB*Plus
- Installation du kit de migration EDB Postgres Migration Toolkit
- Mise en œuvre du kit de migration des objets d’une base Oracle vers Enterprise EDB PostgreSQL
Introduction
EDB Postgres est une version consolidée du moteur de gestion de base de données PostgreSQL. C’est une plateforme de gestion de données de qualité professionnelle qui fournit une vraie compatibilité avec Oracle Database. L'installation des utilitaires EDB*Plus et EDB Migration Toolkit sur Linux RHEL/CentOS/OL avec YUM et le gestionnaire de packages RPM nécessite la configuration du référentiel YUM pour EDB. Dans la mesure où cette étape a déjà été effectuée vous pouvez vous rendre directement au paragraphe "Mise en œuvre d'EDB*Plus".
Site : https://www.enterprisedb.com/fr/
Pré-requis
Pour pouvoir installer les logiciels EDB Postgres sur Linux RHEL/CentOS/OL vous devez avoir un compte utilisateur sur le site EnterpriseDB et le référentiel YUM doit être configuré pour EDB. Le logiciel EDB Enterprise Database doit également avoir été installé préalablement. Consultez les articles EDB Postgres – Enregistrement & Référentiel et EDB Postgres – installation et mise en œuvre pour effectuer ces opérations.
Mise en œuvre d'EDB*Plus
Le guide d'utilisation est accessible à cette adresse : Guide EDB*Plus
Installation de EDB*Plus
Le guide d’installation officiel est accessible à cette adresse : https://www.enterprisedb.com/edb-docs/d/edbplus/user-guides/edbplus-guide/36/installing_edb_plus.html
Avant d'installer EDB*Plus, vous devez d'abord installer Java (version 1.7 ou supérieure). Sur votre système Linux, vous pouvez utiliser le gestionnaire de packages yum pour installer Java. Ouvrez une fenêtre de terminal, et entrez en tant que super utilisateur root :
login as: root
root@serveur's password: xxxxx
# yum install java
Ou bien si java est déjà installé vous pouvez éventuellement mettre à jours la version avec la commande :
# yum update java
Les commandes précédentes installent Open Java dont l'environnement est installé dans le directory /usr/lib/jvm. Vous pouvez également télécharger et installer java depuis le site d'Oracle (recommandé), l'environnement sera alors installé dans le directory /usr/java. Télécharger Java depuis le lien : https://www.oracle.com/java/technologies/javase-downloads.html
Téléchargez le RPM Java :
A partir du répertoire dans lequel a été téléchargé le rpm :
Installez java avec la commande yum :
# yum -y localinstall jdk-8u241-linux-x64.rpm
EDB*Plus utilise java, vous devez configurer la variable JAVA_HOME dans l’environnement shell :
# JAVA_HOME=/usr/java/jdk1.8.0_241-amd64 # export JAVA_HOME
Remarques : la syntaxe ci-dessus est compatible « shell Bourne ». La variable JAVA_HOME peut être différente en fonction de l’installation de java (voir le directory /usr/java ou /usr/lib/jvm). D’autre part, votre référentiel yum EDB doit être configuré avec les droits d’accès de votre compte utilisateur EDB (voir les premiers paragraphes de ce document à ce sujet)
Installez EDB*Plus avec yum :
# yum install edb-as12-edbplus
EDB*Plus est compatible avec l’utilitaire Oracle SQL*Plus. Vous pouvez essayer quelques commandes SQL avec EDB*Plus :
# edbplus enterprisedb Enter Password: Connected to EnterpriseDB 12.2.3 (localhost:5444/edb) AS enterprisedb edb*Plus: Release 12 (Build 38.0.0) Copyright (c) 2008-2019, EnterpriseDB Corporation. All rights reserved. SQL> desc user_tables Name Null? Data Type ------------------------------------------ -------- ------------ SCHEMA_NAME CLOB TABLE_NAME CLOB TABLESPACE_NAME CLOB STATUS VARCHAR2(5) TEMPORARY CHAR(1) SQL> show user USER is "enterprisedb" SQL> select TABLE_NAME from user_tables; TABLE_NAME ------------------------------------------------------------------------ PGA_JOBCLASS PGA_JOB PGA_JOBAGENT PGA_JOBSTEP PGA_SCHEDULE PGA_EXCEPTION PGA_JOBLOG PGA_JOBSTEPLOG PRODUCT_COMPONENT_VERSION DUAL EDB_DBMS_REDACT_FULL_DEFAULT_VALUES ... ... TABLE_NAME ------------------------------------------------------------------------ EDB$STATIO_ALL_INDEXES EDB$STATIO_ALL_TABLES 24 rows retrieved. SQL> exit
Connexion en mode easy*connect
# edbplus enterprisedb@localhost/edb Enter Password: Connected to EnterpriseDB 12.2.3 (localhost:5444/edb) AS enterprisedb edb*Plus: Release 12 (Build 38.0.0) Copyright (c) 2008-2019, EnterpriseDB Corporation. All rights reserved. SQL> exit
Installation du kit de migration EDB Postgres Migration Toolkit
Le référentiel YUM étant correctement configuré pour EDB, l'installation du kit de migration s'effectue comme pour EDB*Plus :
# yum install edb-migrationtoolkit
Mise en œuvre du kit de migration des objets d’une base Oracle vers Enterprise EDB PostgreSQL
Configuration de l'outil de migration
L’outil de migration a été installé dans le directory /usr/edb/migrationtoolkit
# cd /usr/edb/migrationtoolkit # ls bin edb-migrationtoolkit_3rd_party_licenses.txt edb-migrationtoolkit_license.txt etc lib
Le directory contient les sous directory bin, etc et lib ainsi que les contrats de licence d’utilisation de l’outil de migration.
Remarque: Il est important de lire les contrats de licence. Le présent document décrit le processus de migration des objets d’une base de données Oracle vers Enterprise EDB à titre de démonstration et d’évaluation de la faisabilité technique. Si vous désirez adopter ces solutions vous devrez vous rapprocher d’EnterpriseDB Corporation et/ou d'Oracle Corporation.
Configuration des connexions jdbc
Modifiez le fichier toolkit.properties en fonction des paramètres de connexion aux base de données Oracle et PostgreSQL. La base Oracle qui est utilisée ici est la base de données pluggable xepdb1 du logiciel Oracle Express Edition 18c. C’est le contenu du schéma HR qui sera migré dans la base EDB Postgres.
# cd /usr/edb/migrationtoolkit/etc # vi toolkit.properties SRC_DB_URL=jdbc:oracle:thin:@//ol77.localdomain:1521/xepdb1 SRC_DB_USER=hr SRC_DB_PASSWORD=hr TARGET_DB_URL=jdbc:edb://localhost:5444/edb TARGET_DB_USER=enterprisedb TARGET_DB_PASSWORD=secret
Remarquez la chaîne de connexion au format easy connect pour accéder à la pluggable database. Le user Oracle de connexion doit avoir le rôle DBA :
# su – oracle $ export ORACLE_SID=XE $ sqlplus / as sysdba SQL> alter session set container=xepdb1 ; SQL> grant dba to hr; SQL> exit
Le driver JDBC pour EDB Enterprise Postgres est déjà installé.
Télécharger le driver JDBC pour Oracle depuis le site : https://www.oracle.com/database/technologies/jdbc-upc-downloads.html#license-lightbox
Dans cet article c’est le driver JDBC qui est fourni avec Oracle Express Edition qui sera utilisé. Oracle Express Edition est installé dans le directory /opt/oracle/product/18c/dbhomeXE/
# ls /opt/oracle/product/18c/dbhomeXE/
L’environnement java qui sera utilisé par le Kit de Migration est référencé par la variable JAVA_HOME. C’est le JDK Oracle qui a été installé précédemment.
# env | grep JAVA JAVA_HOME=/usr/java/jdk1.8.0_241-amd64 # PATH=$JAVA_HOME/jre/bin:$JAVA_HOME/bin:$PATH # type java java est /usr/java/jdk1.8.0_241-amd64/jre/bin/java
Copiez le driver JDBC Oracle dans le directory $JAVA_HOME/jre/lib/ext
# export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE/ # cp $ORACLE_HOME/jdbc/lib/ojdbc8_g.jar /usr/java/jdk1.8.0_241-amd64/jre/lib/ext/ # cp $ORACLE_HOME/jdbc/lib/ojdbc8.jar /usr/java/jdk1.8.0_241-amd64/jre/lib/ext/ # ls $JAVA_HOME/jre/lib/ext cldrdata.jar localedata.jar ojdbc8.jar sunpkcs11.jar dnsns.jar meta-index sunec.jar zipfs.jar jaccess.jar nashorn.jar ojdbc8_g.jar sunjce_provider.jar
Configuration de l’environnement du user système enterprisedb
Le processus de migration sera exécuté depuis le user système enterprisedb. Son profile doit être modifié comme suit :
- Se connecter sous enterprisedb
# su – enterprisedb
- modifier le fichier .bash_profile et configurer l'environnement shell pour accéder à la base Oracle.
La variable PATH est configurée pour accéder également aux exécutables EDB et du kit de migration : /usr/edb/as12/bin:/usr/edb/migrationtoolkit/bin
$ vim ~/.bash_profile [ -f /etc/profile ] && source /etc/profile PGDATA=/var/lib/edb/as12/data export PGDATA # If you want to customize your settings, # Use the file below. This is not overridden # by the RPMS. [ -f /var/lib/edb/.enterprisedb_profile ] && source /var/lib/edb/.enterprisedb_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs export JAVA_HOME=/usr/java/jdk1.8.0_241-amd64 export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/product/18c/dbhomeXE export ORACLE_SID=XE PATH=$JAVA_HOME/jre/bin:$JAVA_HOME/bin:$ORACLE_HOME/bin:/usr/edb/as12/bin:/usr/edb/migrationtoolkit/bin:$PATH:$HOME/.local/bin:$HOME/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/edb/migrationtoolkit/lib eexport CLASSPATH=$ORACLE_HOME/jdbc/lib:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 alias oe='env | egrep "ORA|LANG|JAVA"' alias oh='cd $ORACLE_HOME'
- Charger le script dans le shell courant
$ . ~/.bash_profile $ oe NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ORACLE_SID=XE ORACLE_BASE=/opt/oracle JAVA_HOME=/usr/java/jdk1.8.0_241-amd64 LANG=fr_FR.UTF-8 ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE $ type sqlplus sqlplus est /opt/oracle/product/18c/dbhomeXE/bin/sqlplus $ type edbplus edbplus est /bin/edbplus $ type java java est /usr/java/jdk1.8.0_241-amd64/jre/bin/java $ java -version java version "1.8.0_241" Java(TM) SE Runtime Environment (build 1.8.0_241-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode) $ type runMTK.sh runMTK.sh est /usr/edb/migrationtoolkit/bin/runMTK.sh $ exit
Migration des objets de la base Oracle XE vers la base EDB Enterprise Postgres
Avant de lancer la procédure de migration il est nécessaire de déverrouiller le user HR de la base Oracle xepdb1 :
# su - oracle $ sqlplus sys/oracle@localhost/xepdb1 as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Thu Apr 9 14:58:29 2020 Version 18.4.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production Version 18.4.0.0.0 SQL> alter session set container=xepdb1; SQL> alter user hr identified by hr account unlock; User altered. SQL> grant dba to hr; Grant succeeded. SQL> exit $ exit
Lancer la procédure de migration
# su - enterprisedb $ runMTK.sh HR
Le Schéma HR a été créé.
Vérifications post migration
Le processus de migration étant terminé, il convient d’inspecter la base EDB pour vérifier que les objets ont été correctement convertis.
Depuis le user système enterprisedb connectez-vous à la base de données edb :
$ edb-psql -d edb -U enterprisedb Mot de passe pour l'utilisateur enterprisedb : edb-psql (12.2.3) Saisissez « help » pour l'aide.
La commande \dn permet d’afficher les schémas de la base de données
edb=# \dn Liste des schémas Nom | Propriétaire ---------+-------------- daphne | enterprisedb hr | enterprisedb pgagent | enterprisedb public | enterprisedb (4 lignes)
Le schéma HR a été créé dans la base de données.
Chemin de recherche par défaut
edb=# show search_path; search_path ----------------- "$user", public (1 ligne) edb=# \dt Aucune relation n'a été trouvée.
La commande \dt permet d’afficher les tables. Aucune table n’a été trouvée avec le chemin de recherche par défaut.
Modification du chemin de recherche
edb=# set search_path = hr, "$user", public; SET edb=# \dt Liste des relations Schéma | Nom | Type | Propriétaire --------+-------------+-------+-------------- hr | countries | table | enterprisedb hr | departments | table | enterprisedb hr | employees | table | enterprisedb hr | job_history | table | enterprisedb hr | jobs | table | enterprisedb hr | locations | table | enterprisedb hr | regions | table | enterprisedb (7 lignes)
Les tables du schéma HR sont maintenant affichées.
La commande \du permet de lister les utilisateurs déclarés dans la base de données
edb=# \du Liste des rôles Nom du rôle | Attributs | Membre de aq_administrator_role | Pas d'héritage, Ne peut pas se connecter +| {} | Profile default | daphne | Superutilisateur +| {} | Profile default | enterprisedb | Superutilisateur, Créer un rôle, Créer une base, Réplication, Contournement RLS +| {} | Profile default |
Le user HR n’existe pas. La création du schéma n’entraine pas la création de l’utilisateur.
Création de l’utilisateur HR
edb=# create user hr with password 'hr'; CREATE ROLE
Assignation de tous les privilèges
edb=# grant all privileges on database edb to hr; GRANT edb=# \q
Connexion au user HR
$ edb-psql -d edb -U hr Mot de passe pour l'utilisateur hr : edb-psql (12.2.3) Saisissez « help » pour l'aide.
Affichage du chemin de recherche par défaut
edb=> show search_path; search_path ----------------- "$user", public (1 ligne)
Affichage des tables
edb=> \dt Aucune relation n'a été trouvée.
Tentative d’accès à une table
edb=> select * from hr.departments; ERREUR: droit refusé pour le schéma hr LIGNE 1 : select * from hr.departments; edb=> \q
Modification du schéma par défaut associé à HR
$ edb-psql -d edb -U enterprisedb Mot de passe pour l'utilisateur enterprisedb : edb-psql (12.2.3) Saisissez « help » pour l'aide. edb=# GRANT USAGE ON SCHEMA hr TO hr; GRANT edb=# \q
Reconnexion à HR
$ edb-psql -d edb -U hr Mot de passe pour l'utilisateur hr : edb-psql (12.2.3) Saisissez « help » pour l'aide.
edb=> \dt Liste des relations Schéma | Nom | Type | Propriétaire --------+-------------+-------+-------------- hr | countries | table | enterprisedb hr | departments | table | enterprisedb hr | employees | table | enterprisedb hr | job_history | table | enterprisedb hr | jobs | table | enterprisedb hr | locations | table | enterprisedb hr | regions | table | enterprisedb (7 lignes)
Tentative d’accès à une table
edb=> select * from hr.departments; ERREUR: droit refusé pour la table departments edb=> \q
L’accès est refusé. Il est nécessaire d’accorder des droits au user HR.
$ edb-psql -d edb -U enterprisedb Mot de passe pour l'utilisateur enterprisedb : edb-psql (12.2.3) Saisissez « help » pour l'aide. edb=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA hr TO hr; GRANT edb=# alter role hr set search_path = hr, "$user", public; ALTER ROLE edb=# \q
Nouvelle tentative
$ edb-psql -d edb -U hr Mot de passe pour l'utilisateur hr : edb-psql (12.2.3) Saisissez « help » pour l'aide. edb=> \dt Liste des relations Schéma | Nom | Type | Propriétaire --------+-------------+-------+-------------- hr | countries | table | enterprisedb hr | departments | table | enterprisedb hr | employees | table | enterprisedb hr | job_history | table | enterprisedb hr | jobs | table | enterprisedb hr | locations | table | enterprisedb hr | regions | table | enterprisedb (7 lignes) edb=> select * from departments; department_id | department_name | manager_id | location_id ---------------+----------------------+------------+------------- 10 | Administration | 200 | 1700 20 | Marketing | 201 | 1800 30 | Purchasing | 114 | 1700 40 | Human Resources | 203 | 2400 50 | Shipping | 121 | 1500 ... ... 250 | Retail Sales | | 1700 260 | Recruiting | | 1700 270 | Payroll | | 1700 (27 lignes) edb=> \q $
Connexion avec EDB*Plus
$ edbplus hr/hr@ol77/edb Connected to EnterpriseDB 12.2.3 (ol77:5444/edb) AS hr edb*Plus: Release 12 (Build 38.0.0) Copyright (c) 2008-2019, EnterpriseDB Corporation. All rights reserved. SQL> show user USER is "hr" SQL> desc departments Name Null? Data Type ------------------------ -------- -------- DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4) SQL> select DEPARTMENT_ID, DEPARTMENT_NAME from departments; DEPARTMENT_ID DEPARTMENT_NAME ------------- ------------------------------ 10 Administration 20 Marketing 30 Purchasing 40 Human Resources 50 Shipping 60 IT 70 Public Relations 80 Sales 90 Executive 100 Finance 110 Accounting DEPARTMENT_ID DEPARTMENT_NAME ------------- ------------------------------ 230 IT Helpdesk 240 Government Sales 250 Retail Sales 260 Recruiting 270 Payroll 27 rows retrieved. SQL> desc add_job_history PROCEDURE ADD_JOB_HISTORY Argument Name Type In/Out Default? ------------------- ------------- ------ -------- P_DEPARTMENT_ID NUMBER IN P_EMP_ID NUMBER IN P_END_DATE TIMESTAMP IN P_JOB_ID VARCHAR2 IN P_START_DATE TIMESTAMP IN SQL> desc secure_dml PROCEDURE SECURE_DML SQL> exit $
En conclusion les objets du schéma HR de la base Oracle ont été migré correctement.