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
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