Replicación de múltiples bases de datos “Pluggable” (PDBs) en una arquitectura “Multitenant” utilizando Oracle GoldenGate 12c

Introducción:
Una de las mejoras más importantes de Oracle GoldenGate 12c es la compatibilidad con ambientes “Multitenant”, característica de Oracle Database 12c, como sabemos, esta arquitectura permite tener bases de datos “Container” con múltiples bases de datos “Pluggable” dentro de ella conformando una arquitectura diseñada para mejor rendimiento y escalabilidad.
Oracle GoldenGate trabaja sobre una base de datos “Container” (CDB) de la misma manera que lo hace sobre una base de datos normal (non-CDB). A lo largo de este articulo analizaremos las principales diferencias cuando se configuran procesos “Extract” y “Replicat” conectados directamente a una base de datos “Pluggable” (PDB) en un ambiente “Multitenant” de Oracle 12c.
Estos son algunos de los puntos importantes que debemos tener en cuenta cuando se trabaja con OGG en una arquitectura “Multitenant” 12c.
  • La replicación está disponible solo utilizando el modo de captura integrado (integrated capture mode) y no el modo clásico.
  • Podemos configurar un unico proceso “Extract” para capturar los cambios efectuados desde multiples PDBs en una base de datos “Container”.
  • Debemos utilizar el modo de captura integrado (integrated capture mode), lo que requiere de un servidor para “LogMining” que será accesible solo desde el ROOT CONTAINER (CDB$ROOT).
  • Debemos utilizar un usuario común (COMMON) para conectarnos con el servidor de “LogMining”.
  • Un proceso “Replicat” puede conectarse y apocar cambios a solo una base de datos “Pluggable” a la vez.

Este articulo explicara como configurar Oracle GoldenGate (OGG) para realizar una replicación uni-direccional entre una base de datos Oracle 12c (cdb1 con bases de datos “Pluggable” cdb1pdb y cdb1pdb2) y otra base de datos Oracle 12c (cdb2 con bases de datos “Pluggable” db2pdb1 y cdb2pdb2).
Arquitectura de replicación Uni-direccional entre bases de datos “Pluggable” dentro de un ambiente “Multitenant”
Para el ejercicio se proporciona la siguiente información:
Servidor de base de datos @Origen (cdb1)Servidor de base de datos @Destino (cdb2)
  1. Oracle Enterprise Linux 5.8 (x86-64)
  2. Oracle 12c R1 Database (12.1.0.1.0)
    ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1
  3. Oracle GoldenGate 12c (12.1.2.0.0)
    GOLDENGATE_HOME=/u01/app/ogg/12g
  4. Database Name: cdb1
  5. Schema Name: pdb1user
  6. Hostname: ggnode1
  7. IPAddress: 192.168.56.105
  8. Pluggable Databases: cdb1pdb1, cdb1pdb2
  1. Oracle Enterprise Linux 5.8 (x86-64)
  2. Oracle 12c R1 Database (12.1.0.1.0)
    ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1
  3. Oracle GoldenGate 12c (12.1.2.0.0)
    GOLDENGATE_HOME=/u01/app/ogg/12g
  4. Database Name: cdb2
  5. Schema Name: pdb1user
  6. Hostname: ggnode2
  7. IPAddress: 192.168.56.106
  8. Pluggable Databases: cdb2pdb1, cdb2pdb2

Procesos Oracle GoldenGate en base de datos
@Origen
Procesos Oracle GoldenGate en base de datos
@Destino
  • Manager: Listening port 7809
  • Extract Process-1: ES01
  • Pump Process-2: PS01
  • Pump Process-3: PS02
  • Manager: Listening port 7810
  • Replicat Process-1: RS01
  • Replicat Process-2: RS02

Procesos Oracle GoldenGate en base de datos @Origen (bases de datos “Plugabble” – cdb1pdb y cdb1pdb2):
  • Proceso “Extract” (ES01): este proceso capturara transacciones desde los ‘Online Redo Logs’ con la ayuda del servidor de “LogMining”.
  • Proceso “Pump” (PS01 y PS02): Este proceso leerá y extraerá datos desde los ‘Trail files’ y no desde los ‘Online Redo Logs’ de la base de datos.

Procesos Oracle GoldenGate en base de datos @Destino (bases de datos “Pluggabl” – cdb2pdb1 y cdb2pdb2):
  • Proceso “Replicat” (RS01 y RS02): Este proceso también conocido como ‘Integrated Replicat Process’, lee los ‘Trail Files’ y construye los denominados ‘Logical Change Records’ (LCRs) que serán transmitidos a la base de datos destino.

Serie de pasos en base de datos @Origen (cdb1):
  • Instalar el software de base de datos Oracle 12c R1 como usuario ‘oracle’ en el directorio: ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1
  • Instalar el software de Oracle GoldenGate 12c como usuario ‘oracle’ en el directorio: GOLDENGATE_HOME=/u01/app/ogg/12g
  • Configurar y crear subdirectorios necesarios para Oracle GoldenGate en el servidor de base de datos Origen (cdb1)
  • Crear y configurar proceso “Manager” y “Extract” y multiples procesos “Pump” para replicacion uni-direccional entre multiples bases de datos “Pluggable” origen (cdb1pdb1 y cdb1pdb2) y destino (cdb2pdb1 y cdb2pdb2).
  • Crear base de datos cdb1 y las bases de datos “Pluggable” cdb1pdb1 y cdb1pdb2 utilizando la opción avanzada de DBCA y agregando los esquemas de ejemplo durante el proceso de configuración de la instalación.
  • Utilizar NETMGR para registrar los servicios de bases de datos necesarios para cdb1, cdb1pdb1 y cdb1pdb2.
  • Utilizar NETMGR para registrar los servicios en el archivo de configuración TNSNAMES.ORA

Instalar la base de datos Oracle 12c con la opción “Multitenant” con multiples bases de datos “Pluggable” en el servidor Origen.
Creando la base de datos ”Container” (cdb1) con dos bases de datos “Pluggable” (cdb1pdb1 y cdb1pdb2)
Instalando el software de Oracle GoldenGate 12c como usuario ‘oracle’ en el servidor de base de datos Origen
Durante la instalación seleccionar la opción ‘Oracle GoldenGate for Oracle Database 12c’
Instalación exitosa del software de Oracle GoldenGate 12c en el servidor Origen.
Ingresar a la base de datos Origen (“Container” cdb1) con privilegios ‘sysdba’ utilizando sqlplus para llevar a cabo las siguientes tareas
  • Crear el tablespace GoldenGate
  • Crear el usuario ‘c##ogguser’ para gestión de procesos GoldenGate
  • Asignar privilegios necesarios para el usuario ‘c##ogguser’
  • Activar la característica SUPPLEMENTAL LOGGING de la base de datos

Nota: el paquete y función dbms_goldengate_auth.grant_admin_privilege otorga los privilegios apropiados para captura y aplicación de datos dentro de un ambiente “Multitenant”.
La función incluye el parámetro CONTAINER que debe ser establecido con el valor ALL, ejemplo: dbms_goldengate_auth.grant_admin_privilege(‘C##OGGUSER’,container=>all)
[oracle@ggnode1 ~]$ source 12c.env
[oracle@ggnode1 ~]$ echo $ORACLE_SID
cdb1

[oracle@ggnode1 ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Sun Jun 7 00:13:12 2015
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> connect sys/oracle@192.168.56.105:1521/cdb1 as sysdba
Connected.

SQL> select con_id,name,open_mode from v$pdbs;

    CON_ID  NAME                            OPEN_MODE
    ----------  ------------------------------  ----------
         2    PDB$SEED                        READ ONLY
         3    CDB1PDB1                        READ WRITE
         4    CDB1PDB2                        READ WRITE

SQL> create tablespace goldengate datafile '/u01/app/oracle/oradata/cdb1/goldengate01.dbf'
 size 100M autoextend on;
Tablespace created.

SQL> create user c##ogguser identified by oracle container=all;
User created.

SQL> grant connect to c##ogguser container=all;
Grant succeeded.

SQL> grant dba to c##ogguser container=all;
Grant succeeded.

SQL> grant unlimited tablespace to c##ogguser container=all;
Grant succeeded.

SQL> grant create session to c##ogguser container=all;
Grant succeeded.

SQL> grant alter session to c##ogguser container=all;
Grant succeeded.

SQL> grant select any dictionary to c##ogguser container=all;
Grant succeeded.

SQL> alter database add supplemental log data;
Database altered.

SQL> alter database force logging;
Database altered.

SQL> alter pluggable database all open;
Pluggable database altered.

SQL> select con_id,name,open_mode from v$pdbs;

    CON_ID  NAME                            OPEN_MODE
     ----------   ------------------------------  ----------
         2    PDB$SEED                        READ ONLY
         3    CDB1PDB1                        READ WRITE
         4    CDB1PDB2                        READ WRITE

SQL> select supplemental_log_data_min from v$database;
SUPPLEME
---------------
YES

SQL> alter system switch logfile;
System altered.  

Ingresar a la base de datos “Pluggable” (cdb1pdb1) con privilegios ‘sysdba’, crear el usuario pdb1user y asignar los privilegios necesarios.
SQL> connect sys/oracle@192.168.56.105:1521/cdb1pdb1 as sysdba
Connected.

SQL> create user pdb1user identified by oracle;
User created.

SQL> grant connect,resource to pdb1user;
Grant succeeded.

SQL> grant create session to pdb1user;
Grant succeeded.

SQL> alter user pdb1user quota unlimited on users;
User altered.  

Ingresar a la base de datos “Pluggable” (cdb1pdb1) con el usuario pdb1user recién creado y crear los siguientes objetos:
SQL> connect pdb1user/oracle@192.168.56.105:1521/cdb1pdb1
Connected.

SQL> create table inventory (
prod_id number,
prod_category varchar2(20),
qty_in_stock number,
last_dml timestamp default systimestamp);

Table created.

SQL> alter table inventory add constraint pk_inventory primary key (prod_id) ;
Table altered.

SQL> grant all on inventory to c##ogguser;
Grant succeeded.

SQL> select tname from tab;

TNAME
--------------------------------------------------------------------------------
INVENTORY

SQL> insert into inventory values(101,'BOOSTER',100,sysdate);
1 row created.

SQL> commit;
Commit complete.

SQL> set lines 200 pages 2000
SQL> select * from inventory;

   PROD_ID  PROD_CATEGORY         QTY_IN_STOCK    LAST_DML
---------- -------------------- ------------ -----------------------------------
       101  BOOSTER                    100       07-JUN-15 01.17.36.000000 AM  

Ingresar a la base de datos “Pluggable” (cdb1pdb2) con privilegios ‘sysdba’, crear el usuario pdb1user y asignar los privilegios necesarios.
SQL> connect sys/oracle@192.168.56.105:1521/cdb1pdb2 as sysdba
Connected.

SQL>  create user pdb1user identified by oracle;
User created.

SQL> grant connect, resource to pdb1user;
Grant succeeded.

SQL> grant create session to pdb1user;
Grant succeeded.

SQL> alter user pdb1user quota unlimited on users;
User altered.

Ingresar a la base de datos “Pluggable” (cdb1pdb2) con el usuario pdb1user recién creado y crear los siguientes objetos:
SQL> connect pdb1user/oracle@192.168.56.105:1521/cdb1pdb2
Connected.

SQL> create table inventory (
prod_id number,
prod_category varchar2(20),
qty_in_stock number,
last_dml timestamp default systimestamp);

Table created.

SQL> alter table inventory add constraint pk_inventory primary key (prod_id);
Table altered.

SQL> grant all on inventory to c##ogguser;
Grant succeeded.

SQL> select tname from tab;

TNAME
--------------------------------------------------------------------------------
INVENTORY

SQL> insert into inventory values(101,'BOOSTER',100,sysdate);
1 row created.

SQL> commit;
Commit complete.

SQL> set lines 200 pages 2000
SQL> select * from inventory;

   PROD_ID  PROD_CATEGORY      QTY_IN_STOCK    LAST_DML
---------- -------------------- ------------ -----------------------------------
       101  BOOSTER                  100       07-JUN-15 01.17.36.000000 AM

Configurar Oracle GoldenGate 12c en la base de datos “Container” Origen (cdb1)
Ejectura el comando ggsci para ingresar a la interfaz de línea de comandos de GoldenGate (GGSCI)
[oracle@ggnode1 ~]$ source 12c.env
[oracle@ggnode1 ~]$ cd $GG
[oracle@ggnode1 12g]$ pwd
/u01/app/ogg/12g

[oracle@ggnode1 12g]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.0.0 17185003 OGGCORE_12.1.2.0.0_PLATFORMS_130924.1316_FBO
Linux, x64, 64bit (optimized), Oracle 12c on Sep 25 2013 02:33:54
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2013, Oracle and/or its affiliates. All rights reserved.

El siguiente comando creara los subdirectorios necesarios para el ambiente de GoldenGate
GGSCI (ggnode1.oracle.com) 1> create subdirs

Creating subdirectories under current directory /u01/app/ogg/12g

Parameter files                   /u01/app/ogg/12g/dirprm: already exists
Report files                      /u01/app/ogg/12g/dirrpt: created
Checkpoint files                /u01/app/ogg/12g/dirchk: created
Process status files            /u01/app/ogg/12g/dirpcs: created
SQL script files                  /u01/app/ogg/12g/dirsql: created
Database definitions files      /u01/app/ogg/12g/dirdef: created
Extract data files                /u01/app/ogg/12g/dirdat: created
Temporary files                 /u01/app/ogg/12g/dirtmp: created
Credential store files          /u01/app/ogg/12g/dircrd: created
Masterkey wallet files          /u01/app/ogg/12g/dirwlt: created
Dump files                        /u01/app/ogg/12g/dirdmp: created

El siguiente comando nos permitirá ingresar a la base de datos “Pluggable” con el usuario ‘c##ogguser’
GGSCI (ggnode1.oracle.com) 2> dblogin userid c##ogguser@cdb1pdb1,password oracle
Successfully logged into database CDB1PDB1.

GGSCI (ggnode1.oracle.com) 3> add schematrandata pdb1user allcols

2015-06-07 00:36:16  INFO    OGG-01788  SCHEMATRANDATA has been added on 
schema pdb1user.

2015-06-07 00:36:16  INFO    OGG-01976  SCHEMATRANDATA for scheduling columns 
has been added on schema pdb1user.

2015-06-07 00:36:16  INFO    OGG-01977  SCHEMATRANDATA for all columns has been 
added on schema pdb1user.

GGSCI (ggnode1.oracle.com) 4> dblogin userid c##ogguser@cdb1pdb2,password oracle
Successfully logged into database CDB1PDB2.

GGSCI (ggnode1.oracle.com) 5> add schematrandata pdb1user allcols

2015-06-07 00:36:42  INFO    OGG-01788  SCHEMATRANDATA has been added on schema 
pdb1user.

2015-06-07 00:36:42  INFO    OGG-01976  SCHEMATRANDATA for scheduling columns has 
been added on schema pdb1user.

2015-06-07 00:36:42  INFO    OGG-01977  SCHEMATRANDATA for all columns has been 
added on schema pdb1user.

Ingresar a la base de datos “Container” en el servidor Origen (cdb1)
GGSCI (ggnode1.oracle.com) 6> dblogin userid c##ogguser@cdb1,password oracle Successfully logged into database CDB$ROOT.
El siguiente comando registra el proceso “Extract” (ES01) con la base de datos. Este proceso es llamado ‘Integrated Capture Mode’ en donde el proceso ES01 interactúa directamente con la base de datos “LogMinig”, residente en la base de datos Origen, que recibe los cambios en forma de ‘Logical Change Records’ (LCR).
GGSCI (ggnode1.oracle.com) 7> register extract es01 DATABASE CONTAINER (cdb1pdb1)
Extract ES01 successfully registered with database at SCN 1751521.

El siguiente comando registra el proceso “Extract” (ES01) con la base de datos. Este añadira la segunda base de datos “Pluggable” (cdb1pdb2).
GGSCI (ggnode1.oracle.com) 8> register extract es01 DATABASE ADD CONTAINER (cdb1pdb2)
Extract ES01 successfully registered containers with database at SCN 1782819.

Agregar los procesos “Extract” (ES01) y “Pump” (PS01 y PS02)
GGSCI (ggnode1.oracle.com) 9> add extract es01 integrated tranlog,begin now
EXTRACT added.

GGSCI (ggnode1.oracle.com) 10> add exttrail ./dirdat/lt, extract es01 ,megabytes 10
EXTTRAIL added.

GGSCI (ggnode1.oracle.com) 11> add extract ps01 ,exttrailsource ./dirdat/lt begin now
EXTRACT added.

GGSCI (ggnode1.oracle.com) 12> add extract ps02,exttrailsource ./dirdat/lt begin now
EXTRACT added.

GGSCI (ggnode1.oracle.com) 13> add rmttrail ./dirdat/rt,extract ps01
RMTTRAIL added.

GGSCI (ggnode1.oracle.com) 14> add rmttrail ./dirdat/pt,extract ps02
RMTTRAIL added.

GGSCI (ggnode1.oracle.com) 15> edit param mgr

GGSCI (ggnode1.oracle.com) 16> view param mgr
PORT 7809

El parámetro SOURCECATALOG nos permitirá utilizar la nomenclatura Schema.Table registrando únicamente la base de datos “Container”.
El siguiente comando creara y configurara el proceso “Extract” (ES01) y los procesos “Pump” (PS01 y PS02) con la opcion de replicacion “Multitenant”
GGSCI (ggnode1.oracle.com) 17> edit param es01
GGSCI (ggnode1.oracle.com) 40> view param es01

extract es01
userid c##ogguser@cdb1,password oracle
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
exttrail ./dirdat/lt
SOURCECATALOG cdb1pdb1
table pdb1user.*;
SOURCECATALOG cdb1pdb2
table pdb1user.*;

GGSCI (ggnode1.oracle.com) 19> edit param ps01
GGSCI (ggnode1.oracle.com) 41> view param ps01
extract ps01
userid c##ogguser,password oracle
RMTHOST ggnode2,mgrport 7810
rmttrail ./dirdat/rt
SOURCECATALOG cdb1pdb1
table pdb1user.*;

GGSCI (ggnode1.oracle.com) 21> edit param ps01
extract ps02
userid c##ogguser,password oracle
RMTHOST ggnode2,mgrport 7810
rmttrail ./dirdat/pt
SOURCECATALOG cdb1pdb2
table pdb1user.*;

Iniciar el proceso “Manager” en la base de datos Origen (cdb1)
GGSCI (ggnode1.oracle.com) 24> start mgr
Manager started.

GGSCI (ggnode1.oracle.com) 25> info all

Program       Status        Group         Lag at Chkpt    Time Since Chkpt

MANAGER       RUNNING
EXTRACT       STOPPED       ES01          00:00:00        00:05:34
EXTRACT       STOPPED       PS01          00:00:00        00:04:54
EXTRACT       STOPPED       PS02          00:00:00        00:04:26

GGSCI (ggnode1.oracle.com) 2> exit

Serie de pasos en base de datos @Destino (cdb2):
  • Instalar el software de Oracle GoldenGate 12c como usuario ‘oracle’ en el directorio: GOLDENGATE_HOME=/u01/app/ogg/12g
  • Configurar y crear subdirectorios necesarios para Oracle GoldenGate en el servidor de base de datos Destino (cdb2)
  • Crear y configurar proceso “Manager” y “Replicat para replicacion uni-direccional entre múltiples bases de datos “Pluggable” origen (cdb1pdb1 y cdb1pdb2) y destino (cdb2pdb1 y cdb2pdb2).
  • Crear base de datos cdb2 y las bases de datos “Pluggable” cdb2pdb1 y cdb2pdb2 utilizando la opción avanzada de DBCA y agregando los esquemas de ejemplo durante el proceso de configuración de la instalación.
  • Utilizar NETMGR para registrar los servicios de bases de datos necesarios para cdb1, cdb1pdb1 y cdb1pdb2.
  • Utilizar NETMGR para registrar los servicios en el archivo de configuración TNSNAMES.ORA

Instalar la base de datos Oracle 12c con la opción “Multitenant” con múltiples bases de datos “Pluggable” en el servidor Destino.
Creando base de datos “Container” (cdb2) con dos bases de datos “Pluggable” (cdb2pdb1 y cdb2pdb2)
Instalando el software de Oracle GoldenGate como usuario ‘oracle’ en el servidor de base de datos Destino
Durante la instalación seleccionamos ‘Oracle GoldenGate for Database 12c’
Instalación exitosa del software de Oracle GoldenGate 12c en la base de datos Destino.
Ingresar a la base de datos Destino (“Container” cdb1) con privilegios ‘sysdba’ utilizando sqlplus para llevar a cabo las siguientes tareas
  • Crear el tablespace GoldenGate
  • Crear el usuario ‘c##ogguser’ para gestion de procesos GoldenGate
  • Asignar privilegios necesarios para el usuario ‘c##ogguser’
  • Activar la característica SUPPLEMENTAL LOGGING de la base de datos

Nota: el paquete y función dbms_goldengate_auth.grant_admin_privilege otorga los privilegios apropiados para captura y aplicación de datos dentro de un ambiente “Multitenant”.
La función incluye el parámetro CONTAINER que debe ser establecido con el valor ALL, ejemplo:
dbms_goldengate_auth.grant_admin_privilege(‘C##OGGUSER’,container=>all)

[oracle@ggnode2 ~]$ source 12c.env
[oracle@ggnode2 ~]$ sqlplus /nolog

SQL*Plus: Release 12.1.0.1.0 Production on Sun Jun 7 00:46:15 2015
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> connect sys/oracle@192.168.56.106:1521/cdb2 as sysdba
Connected.

SQL> select con_id,name,open_mode from v$pdbs;

    CON_ID  NAME                            OPEN_MODE
    ----------  ------------------------------  ------------------
         2    PDB$SEED                        READ ONLY
         3    CDB2PDB1                        READ WRITE
         4    CDB2PDB2                        READ WRITE

SQL> create tablespace goldengate datafile '/u01/app/oracle/oradata/cdb2/
goldengate01.dbf' size 100M autoextend on;
Tablespace created.

SQL> create user c##ogguser identified by oracle container=all;
User created.

SQL> grant connect to c##ogguser container=all;
Grant succeeded.

SQL> grant dba to c##ogguser container=all;
Grant succeeded.

SQL> grant unlimited tablespace to c##ogguser container=all;
Grant succeeded.

SQL> grant create session to c##ogguser container=all;
Grant succeeded.

SQL> grant alter session to c##ogguser container=all;
Grant succeeded.

SQL> grant select any dictionary to c##ogguser container=all;
Grant succeeded.

SQL> alter database add supplemental log data;
Database altered.

SQL> alter database force logging;
Database altered.

SQL> alter system switch logfile;
System altered.

SQL> select supplemental_log_data_min,force_logging from v$database;

SUPPLEME  FORCE_LOGGING
-------------   ---------------------------------------
YES         YES

SQL> exec dbms_goldengate_auth.grant_admin_privilege('C##OGGUSER',container=>'all');
PL/SQL procedure successfully completed.

Ingresar a la base de datos “Pluggable” (cdb2pdb1) con privilegios ‘sysdba’, crear el usuario pdb1user y asignar los privilegios necesarios.
SQL> connect sys/oracle@192.168.56.106:1521/cdb2pdb1 as sysdba
Connected.

SQL> create user pdb1user identified by oracle;
User created.

SQL> grant connect,resource to pdb1user;
Grant succeeded.

SQL> grant create session to pdb1user;
Grant succeeded.

SQL> alter user pdb1user quota unlimited on users;
User altered.

Ingresar a la base de datos “Pluggable” (cdb2pdb1) con el usuario pdb1user recién creado y crear los mismos objetos creados en el ambiente Origen.
SQL> connect pdb1user/oracle@192.168.56.106:1521/cdb2pdb1
Connected.

SQL> create table inventory (
prod_id number,
prod_category varchar2(20),
qty_in_stock number,
last_dml timestamp default systimestamp); 
Table created.

SQL> alter table inventory add constraint pk_inventory primary key (prod_id);
Table altered.

SQL> grant all on inventory to c##ogguser;
Grant succeeded.

Ingresar a la base de datos “Pluggable” (cdb2pdb2) con privilegios ‘sysdba’, crear el usuario pdb1user y asignar privilegios necesarios
SQL> connect sys/oracle@192.168.56.106:1521/cdb2pdb2 as sysdba
Connected.

SQL> create user pdb1user identified by oracle;
User created.

SQL> grant connect,resource to pdb1user;
Grant succeeded.

SQL> grant create session to pdb1user;
Grant succeeded.

SQL> alter user pdb1user quota unlimited on users;
User altered.

Ingresar a la base de datos “Pluggable” (cdb2pdb2) con el usuario pdb1user recién creado y crear los objetos siguientes para replicación de la base de datos origen.
SQL> connect pdb1user/oracle@192.168.56.106:1521/cdb2pdb2
Connected.

SQL> create table inventory (
prod_id number,
prod_category varchar2(20),
qty_in_stock number,
last_dml timestamp default systimestamp); 
Table created.

SQL> alter table inventory add constraint pk_inventory primary key (prod_id);
Table altered.

SQL> grant all on inventory to c##ogguser;
Grant succeeded.

Configurando Oracle GoldenGate 12c en el servidor de base de datos Destino (cdb2)
[oracle@ggnode2 ~]$ source 12c.env
[oracle@ggnode2 ~]$ cd $GG
[oracle@ggnode2 12g]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.0.0 17185003 OGGCORE_12.1.2.0.0_PLATFORMS_130924.1316_FBO
Linux, x64, 64bit (optimized), Oracle 12c on Sep 25 2013 02:33:54
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2013, Oracle and/or its affiliates. All rights reserved.

GGSCI (ggnode2.oracle.com) 1> create subdirs

Creating subdirectories under current directory /u01/app/ogg/12g

Parameter files                   /u01/app/ogg/12g/dirprm: already exists
Report files                      /u01/app/ogg/12g/dirrpt: created
Checkpoint files                /u01/app/ogg/12g/dirchk: created
Process status files            /u01/app/ogg/12g/dirpcs: created
SQL script files                  /u01/app/ogg/12g/dirsql: created
Database definitions files      /u01/app/ogg/12g/dirdef: created
Extract data files                /u01/app/ogg/12g/dirdat: created
Temporary files                 /u01/app/ogg/12g/dirtmp: created
Credential store files          /u01/app/ogg/12g/dircrd: created
Masterkey wallet files          /u01/app/ogg/12g/dirwlt: created
Dump files                        /u01/app/ogg/12g/dirdmp: created

Ingresar a la base de datos “Pluggable” (cdb2pdb1) en la base de datos destino con el usuario ‘c##ogguser’
GGSCI (ggnode2.oracle.com) 1> dblogin userid c##ogguser@cdb2pdb1,password oracle
Successfully logged into database CDB2PDB1.

The following command will add replicat process (RS01) for pluggable database (cdb2pdb1).

GGSCI (ggnode2.oracle.com) 2> add replicat rs01 integrated exttrail ./dirdat/rt
REPLICAT (Integrated) added.

Ingresar a la base de datos “Pluggable” (cdb2pdb2) en el servidor Destino con el usuario ‘c##ogguser’
GGSCI (ggnode2.oracle.com) 3> dblogin userid c##ogguser@cdb2pdb2,password oracle
Successfully logged into database CDB2PDB2.

The following command will add replicat process (RS01) for pluggable database (cdb2pdb2).

GGSCI (ggnode2.oracle.com) 4> add replicat rs02 integrated exttrail ./dirdat/pt
REPLICAT (Integrated) added.

GGSCI (ggnode2.oracle.com) 5> edit param mgr
GGSCI (ggnode2.oracle.com) 6> view param mgr
PORT 7810

Creando y configurando dos procesos “Replicat” para dos bases de datos “Pluggable” en el servidor destino (cdb2pdb1 y cdb2pdb2)
GGSCI (ggnode2.oracle.com) 7> edit param rs01
GGSCI (ggnode2.oracle.com) 8> view param rs01

replicat rs01
USERID c##ogguser@cdb2pdb1,password oracle
assumetargetdefs
map cdb1pdb1.pdb1user.*,target cdb2pdb1.pdb1user.*;

GGSCI (ggnode2.oracle.com) 10> edit param rs02
GGSCI (ggnode2.oracle.com) 9> view param rs02

replicat rs02
USERID c##ogguser@cdb2pdb2,password oracle
assumetargetdefs
map cdb1pdb2.pdb1user.*,target cdb2pdb2.pdb1user.*;

Iniciar el proceso “Manager” y los proceso “Replicat” (RS01 y RS02) en el servidor Destino
GGSCI (ggnode2.oracle.com) 12> start mgr
Manager started.

GGSCI (ggnode2.oracle.com) 13> start replicat rs01

Sending START request to MANAGER ...
REPLICAT RS01 starting

GGSCI (ggnode2.oracle.com) 14> start replicat rs02

Sending START request to MANAGER ...
REPLICAT RS02 starting

Verificar el estado de los procesos “Manager” y “Replicat” (RS01 y RS02) en el servidor Destino
GGSCI (ggnode2.oracle.com) 15> info all

Program       Status        Group         Lag at Chkpt    Time Since Chkpt

MANAGER       RUNNING
REPLICAT      RUNNING       RS01          00:00:00        00:00:01
REPLICAT      RUNNING       RS02          00:00:00        00:00:00

GGSCI (ggnode2.oracle.com) 21>

Ingresar a la interfaz de comandos GGSCI de GoldenGate en el servidor Origen
Iniciar los procesos “Manager” y “Extract” (ES01 y ES02) en el servidor Origen
GGSCI (ggnode1.oracle.com) 26> start er *

Sending START request to MANAGER ...
EXTRACT ES01 starting

Sending START request to MANAGER ...
EXTRACT PS01 starting

Sending START request to MANAGER ...
EXTRACT PS02 starting

Verificar el estado de los procesos iniciado “Manager” y “Extract” (ES01 y ES02) en el servidor Origen
GGSCI (ggnode1.oracle.com) 27> info all

Program       Status        Group         Lag at Chkpt    Time Since Chkpt

MANAGER       RUNNING
EXTRACT       STARTING      ES01          00:00:00        00:30:41
EXTRACT       RUNNING       PS01          00:00:00        00:30:01
EXTRACT       RUNNING       PS02          00:00:00        00:29:33

Note: The Extract Process (ES01) still reports a status of “STARTING” after running
the info all command. Since the Extract Process (ES01) is running in Integrated Capture
Mode it requires extra startup time.

GGSCI (ggnode1.oracle.com) 28> info all

Program       Status        Group         Lag at Chkpt    Time Since Chkpt

MANAGER       RUNNING
EXTRACT       RUNNING       ES01          00:31:39        00:00:00
EXTRACT       RUNNING       PS01          00:00:00        00:00:03
EXTRACT       RUNNING       PS02          00:00:00        00:00:03

Con las siguientes instrucciones vamos a verificar el estado de la replicación mediante los objetos creados durante el procedimiento anterior.
Ingresar al servidor Origen en la base de datos “Pluggable” (cdb1pdb1) y generar cambios en la tabla Inventory, después verificar que los cambios hayan sido aplicados en la base de datos “Pluggable” Destino (cdb2pdb1)
Ingresar al servidor Origen en la base de datos “Pluggable” (cdb1pdb2) y generar cambios en la tabla Inventory, después verificar que los cambios hayan sido aplicados en la base de datos “Pluggable” Destino (cdb2pdb2)
Ingresar a la interfaz GGSCI de GoldenGate en el servidor Origen y verificar las estadisticas del proceso “Extract” (ES01) y el total de operaciones ejecutadas
Ingresar a la interfaz GGSCI de GoldenGate en el servidor Origen y verificar las estadisticas de los procesos “Pump” (PS01 y PS02) y el total de operaciones ejecutadas
Ingresar a la interfaz GGSCI de GoldenGate en el servidor Destino y verificar estadisticas del proceso “Replicat” (RS01) y el total de operaciones ejecutadas
Ingresar a la interfaz GGSCI de GoldenGate en el servidor Destino y verificar estadisticas del proceso “Replicat” (RS02) y el total de operaciones ejecutadas.
Conclusión: Todas las bases de datos “Pluggable” (PDBs) que pertenecen a una base de datos “Container” (CDB) comparten los mismos ‘Redo Log Files’, por lo tanto, GoldenGate necesita filtrar los registros de las PDBs que no necesita. A la vez, cada base de datos “Pluggable” mantiene su propio diccionario de datos y es tarea de GoldenGate registrar y monitorear múltiples diccionarios de datos.

Comentarios

Entradas populares de este blog

Installing Oracle GoldenGate for Oracle 12c

Replicación de datos con múltiples procesos "Extract" y "Replicat" con el modo de captura integrada utilizando Oracle GoldenGate 12c

How To Rename ASM Diskgroup With RAC Database