Réplication Uni directionnelle avec Oracle GoldenGate

 
 
Oracle GoldenGate est une solution qui permet d’extraire et de répliquer des données à travers une variété de  topologies.
La réplication peut se faire de façon unidirectionnelle ou bidirectionnelle.
 
 
 

1-/ Architecture

goldengate
Les composants GoldenGate sont :

  • Capture(Extract) : Ce processus extrait les données insérées, modifiées, supprimées de la base source vers un fichier plat
  • Source Trail (Env. Source) : Fichier plat dans lequel le processus d’extraction écrit séquentiellement les opérations d’insertion, de modification, suppression validées.
  • Data Pump (Optionel) : Il lit les enregistrements dans le fichier plat de l’environnement source et les transfert via le réseau vers un fichier plat sur le serveur cible.
  • Collector : Processus démarré en arrière plan par le processus manager et écrit les données dans le fichier plat sur le serveur cible
  • Remote Trail (Env Cible) : Idem que le fichier plat du serveur source sauf qu’il est créé sur le serveur cible par le collector
  • Processus de réplication (Delivery) : Ce processus applique les données modifiées sur la base cible par lecture du Remote Trail.
  • Processus Manager : Démarré sur les 2 environnements, il gère toutes les ressource et les processus du GoldenGate.

 

2-/ Environnement de test

L’environnement de test utilisé pour l’implémentation d’Oracle GoldenGate est :
Source : Serveur (db12c), Rdbms (11.2.0.3.0), ASM (12.1.0.2.0), GoldenGate (12.2.0.1.1)
Cible : Serveur (db12c), Rdbms (12.1.0.2.0), ASM (12.1.0.2.0), GoldenGate (12.2.0.1.1)
Les bases de données sur les 2 environnements sont en archivage des redologs
Toutes les commandes GoldebGate sont exécutées avec l’utilitaire GGSCI à partir de répertoire $OGG_HOME
 

3-/ Installation Oracle GoldenGate

L’installation de GoldenGate s’est faite en mode silent via un fichier de reponse sur les serveurs source et cible :
Il faut :

  • Télécharger Oracle GoldenGate (Via OTN ou E-Delivery) : V100692-01.zip
  • Dezipper l’archive dans un répertoire temporaire
  • Editer le fichier de reponse en fonction de votre environnement
  • Exécuter l’installeur en mode silencieux

3.1-/ Paramètres du fichier de réponse de l’environnement source

INSTALL_OPTION=ORA11g
SOFTWARE_LOCATION=/moteur/product/oracle/11g/ogg
START_MANAGER=true
MANAGER_PORT=7810
DATABASE_LOCATION=/moteur/product/oracle/11g/db_1
INVENTORY_LOCATION=/moteur/product/oraInventory
UNIX_GROUP_NAME=oinstall

3.2-/ Paramètres du fichier de réponse de l’environnement Cible

INSTALL_OPTION=ORA12c
SOFTWARE_LOCATION=/moteur/product/oracle/12c/ogg
START_MANAGER=true
MANAGER_PORT=7809
DATABASE_LOCATION=/moteur/product/oracle/12c/db_1
INVENTORY_LOCATION=/moteur/product/oraInventory
UNIX_GROUP_NAME=oinstall

3.3-/ Exécution du l’installeur

./runInstaller -silent -responseFile /moteur/product/oracle/12c/ogg_bin/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp

3.4-/ Affichage du statut du processus Manager

GGSCI (db12c) info mgr
Manager is running (IP port db12c.7810, Process ID 10212).

3.4-/ Création d’un schéma dans la base source et cible utilisable par GoldenGate

create user ogg identified by ogg default tablespace ogg_data temporary tablespace TEMP01 ;
GRANT CONNECT, RESOURCE TO ogg;
GRANT SELECT ANY DICTIONARY, SELECT ANY TABLE TO ogg;
GRANT CREATE TABLE TO ogg;
GRANT FLASHBACK ANY TABLE TO ogg;
GRANT EXECUTE ON dbms_flashback TO ogg;
GRANT EXECUTE ON utl_file TO ogg;
GRANT CREATE ANY TABLE TO ogg;
GRANT INSERT ANY TABLE TO ogg;
GRANT UPDATE ANY TABLE TO ogg;
GRANT DELETE ANY TABLE TO ogg;
GRANT DROP ANY TABLE TO ogg;
GRANT ALTER ANY TABLE TO ogg;
GRANT ALTER SYSTEM TO ogg;
GRANT LOCK ANY TABLE TO ogg;
GRANT SELECT ANY TRANSACTION to ogg;
ALTER USER ogg QUOTA UNLIMITED ON ogg_data;
exec DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ogg');
ALTER SYSTEM SET enable_goldengate_replication=TRUE;

3.5-/ Activation du SUPPLEMENTAL LOG sur la base source

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ;

 

4-/ Chargement Initial

Il consiste à répliquer le contenu des tables JAK.TCUSTORD et JAK.TCUSTMER de l’environnement source vers la cible

4.1-/ Nombre de ligne des tables dans l’environnement source

select count(*) from TCUSTORD ;
COUNT(*)
----------
2
SQL> select count(*) from TCUSTMER ;
COUNT(*)
----------
2

4.2-/ Nombre de ligne des tables dans l’environnement cible

select count(*) from TCUSTORD ;
COUNT(*)
----------
SQL> select count(*) from TCUSTMER
COUNT(*)
----------

4.3-/ Edition du fichier de configuration du processus d’extraction sur la source

GGSCI (db12c) edit param EXTLOAD1
EXTRACT EXTLOAD1
USERID ogg@jakc11g, PASSWORD ogg
RMTHOST db12c, MGRPORT 7809
MTTASK replicat, GROUP REPLOAD1
TABLE JAK.TCUSTORD;
TABLE JAK.TCUSTMER;

4.4-/ Création d’un groupe d’extraction sur la source

GGSCI (db12c) ADD EXTRACT EXTLOAD1, SOURCEISTABLE
EXTRACT added.

SOURCEISTABLE indique que la source de données est la table de la base

4.5-/ Edition du fichier de configuration du processus de réplication sur la cible

GGSCI (db12c) edit param REPLOAD1
REPLICAT REPLOAD1
USERID ogg@jakc12c, PASSWORD ogg
ASSUMETARGETDEFS
MAP JAK.TCUSTORD, TARGET JAK.TCUSTORD;
MAP JAK.TCUSTMER, TARGET JAK.TCUSTMER;

ASSUMETARGETDEFS indique que la définition des tables sources et cibles est identique

4.6-/ Création d’un groupe de réplication sur la cible

GGSCI (db12c) add replicat REPLOAD1, SPECIALRUN
REPLICAT added.

SPECIALRUN indique que le chargement se fait en une fois

4.7-/ Démarrage du groupe d’extraction sur la source

GGSCI (db12c) start extract extload1
Sending START request to MANAGER ...
EXTRACT EXTLOAD1 starting

4.8-/ Vérification du processus d’extraction sur la source

GGSCI (db12c) info extract extload1
EXTRACT    EXTLOAD1  Last Started 2016-09-02 14:11   Status RUNNING
Checkpoint Lag       Not Available
Process ID           10156
Log Read Checkpoint  Table JAK.TCUSTORD
                     2016-09-02 14:11:20  Record 1
Task                 SOURCEISTABLE
GGSCI (db12c) info extract extload1
EXTRACT    EXTLOAD1  Last Started 2016-09-02 14:11   Status STOPPED
Checkpoint Lag       Not Available
Log Read Checkpoint  Table JAK.TCUSTMER
                     2016-09-02 14:11:45  Record 2
Task                 SOURCEISTABLE

4.9-/ Vérification de la réplication sur la source

select count(*) from TCUSTORD ;
  COUNT(*)
----------
         2
select count(*) from TCUSTMER ;
  COUNT(*)
----------
         2

 

5-/ Synchronisation en temps réel des 2 environnements

Elle permet de une réplication en temps réel des modification sur la base source vers la base cible

5.1-/ Vérification du SUPPLEMENTAL LOGGIN de la base source

SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
SUPPLEME
--------
YES

Dans le cas d’une réplication bidirectionnelle, le supplemtal loggin doit être activé sur la base cible (voir paragraphe 3.5)

5.2-/ Activation du supplemental loggin au niveau table

Cette activation permet force la base de données de journaliser les colonne de type clé primaire pour toutes opérations de mise à jour.

GGSCI (db12c) DBLOGIN USERID ogg@jakc11g, PASSWORD ogg
Successfully logged into database.
GGSCI (db12c as ogg@jakc11g) add trandata JAK.TCUSTORD
GGSCI (db12c as ogg@jakc11g) add trandata JAK.TCUSTMER

5.3-/ Désactivation des triggers et des contraintes de type cascade delete

Si la base cible contient des triggers et des contraintes de type cascade delete, il est impratif de les désactiver afin d’éviter la duplication des modifications sur la base cible.
Il existe 2 méthodes de désactivation des triggers et des contraintes de type cascade delete

5.3.1-/ Désactivation par un script SQL

spool disable_cascade_delete_constraints.sql
select 'alter table '||owner||'.'||table_name|| ' disable constraint '||constraint_name||';'
from all_constraints
where delete_rule = 'CASCADE' and owner = '&SCHEMA';
spool off
spool disable_triggers.sql
select 'alter trigger '||owner||'.'||trigger_name|| ' disable ;'
from all_triggers
where owner = '&SCHEMA';
spool off

5.3.2-/ Désactivation par les paramètre de réplication via OGG

pour les version Oracle supérieure à 10.2.0.5 on peut utiliser l’option de réplication ci dessous pour désactiver les triggers :
DBOPTIONS SUPPRESSTRIGGERS
pour les version Oracle supérieure à 9.2.0.7 on peut utiliser l’option de réplication ci dessous pour désactiver les contraintes de type cascade delete:
DBOPTIONS DEFERREFCONST

5.4-/ Création de la table de checkpoint sur la base cible

Le point de contrôle permet à tout moment au processus de réplication de savoir ou commencer après une erreure ou un arrêt du processus

GGSCI (db12c) edit param ./GLOBALS
GGSCHEMA ogg
CHECKPOINTTABLE ogg.CHKPTAB
GGSCI (db12c) DBLOGIN USERID ogg@jakc11g, PASSWORD ogg
Successfully logged into database.
GGSCI (db12c as ogg@jakc12c) ADD CHECKPOINTTABLE ogg.CHKPTAB
Successfully created checkpoint table ogg.CHKPTAB.

5.5-/ Edition du fichier de configuration du groupe d’extraction sur la source

GGSCI (db12c) edit param EXTTRAN1
EXTRACT EXTTRAN1
SETENV (ORACLE_HOME="/moteur/product/oracle/11g/db_1")
SETENV (ORACLE_SID="jakc11g")
USERID ogg@jakc11g, PASSWORD ogg
ExtTrail /moteur/product/oracle/11g/ogg/dirdat/e1
TRANLOGOPTIONS ASMUSER sys@ASM, ASMPASSWORD oracle
TABLE JAK.TCUSTORD;
TABLE JAK.TCUSTMER;

ExtTrail : indique le nom du fichier plat sur la source
TRANLOGOPTIONS : Indique les paramètres de connexion à la base ASM pour la lecture des fichiers logs

5.6-/ Création du groupe d’extraction et du fichier trail sur la source

GGSCI (db12c) ADD EXTRACT EXTTRAN1, TRANLOG, BEGIN NOW
EXTRACT added.
GGSCI (db12c) ADD EXTTRAIL /moteur/product/oracle/11g/ogg/dirdat/e1, EXTRACT EXTTRAN1, MEGABYTES 100
RMTTRAIL added.

5.7-/ Edition du fichier de configuration du groupe d’extraction Data Pump sur la source

GGSCI (db12c) edit param DPETRAN1
EXTRACT DPETRAN1
PASSTHRU
RmtHost db12c, MgrPort 7809
RmtTrail /moteur/product/oracle/12c/ogg/dirdat/e2
TABLE JAK.TCUSTORD;
TABLE JAK.TCUSTMER;

5.8-/ Création du groupe d’extraction Data Pump et du fuchier trail sur la source

GGSCI (db12c) ADD EXTRACT DPETRAN1 , EXTTRAILSOURCE /moteur/product/oracle/11g/ogg/dirdat/e1
GGSCI (db12c) ADD RMTTRAIL /moteur/product/oracle/12c/ogg/dirdat/e2, EXTRACT DPETRAN1, MEGABYTES 100

RMTTRAIL : indique le fichier plat sur l’environnement cible

5.9-/ Démarrage des groupes d’extraction

GGSCI (db12c) start ext EXTTRAN1
GGSCI (db12c) start ext DPETRAN1

5.10-/ Affichage du statut des processus GoldenGate sur la source

GGSCI (db12c) info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING
EXTRACT     RUNNING     DPETRAN1    00:00:00      00:09:16
EXTRACT     RUNNING     EXTTRAN1    00:00:00      00:00:05

5.11-/ Edition du fichier de configuration du processus de réplication sur la cible

GGSCI (db12c) edit param REPTRAN1
REPLICAT REPTRAN1
SETENV (ORACLE_HOME="/moteur/product/oracle/12c/db_1")
SETENV (ORACLE_SID="jakc12c")
USERID ogg@jakc12c, PASSWORD ogg
ASSUMETARGETDEFS
MAP JAK.TCUSTORD, TARGET JAK.TCUSTORD;
MAP JAK.TCUSTMER, TARGET JAK.TCUSTMER;

5.12-/ Création du groupe réplication sur la cible

GGSCI (db12c as ogg@jakc12c) ADD REPLICAT REPTRAN1, EXTTRAIL /moteur/product/oracle/12c/ogg/dirdat/e2,  CHECKPOINTTABLE ogg.CHKPTAB
REPLICAT added.

5.13-/ Démarrage du groupe de réplication sur la cible

GGSCI (db12c) start REPLICAT REPTRAN1
Sending START request to MANAGER ...
REPLICAT REPTRAN1 starting

5.14-/ Affichage du statut des processus GoldenGate sur la Cible

GGSCI (db12c) info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING
REPLICAT    RUNNING     REPTRAN1    00:00:00      00:00:03

 

6-/ Test de réplication

6.1-/ Affichage du contenu de la table TCUSTORD de la base source

select * from TCUSTORD
CUST ORDER_DAT PRODUCT_   ORDER_ID PRODUCT_PRICE PRODUCT_AMOUNT TRANSACTION_ID
---- --------- -------- ---------- ------------- -------------- --------------
WILL 30-SEP-94 CAR             144         17525              3            100
JANE 11-NOV-95 PLANE           256        133300              1            100

6.2-/ Affichage du contenu de la table TCUSTORD de la base cible

select * from TCUSTORD
CUST ORDER_DAT PRODUCT_   ORDER_ID PRODUCT_PRICE PRODUCT_AMOUNT TRANSACTION_ID
---- --------- -------- ---------- ------------- -------------- --------------
WILL 30-SEP-94 CAR             144         17525              3            100
JANE 11-NOV-95 PLANE           256        133300              1            100

6.3-/ Update des lignes sur la base source

update TCUSTORD set PRODUCT_PRICE = 30000 where ORDER_ID = 144;
1 row updated.
commit ;
Commit complete.
update TCUSTORD set PRODUCT_PRICE = 200000 where ORDER_ID = 256 ;
1 row updated.
commit;
Commit complete.

6.4-/ Affichage du contenu de la table TCUSTORD de la base cible

select * from TCUSTORD;
CUST ORDER_DAT PRODUCT_   ORDER_ID PRODUCT_PRICE PRODUCT_AMOUNT TRANSACTION_ID
---- --------- -------- ---------- ------------- -------------- --------------
WILL 30-SEP-94 CAR             144         30000              3            100
JANE 11-NOV-95 PLANE           256        200000              1            100