Replicação de múltiplos Pluggable Databases em um Banco de Dados Multitenant utilizando Oracle GoldenGate 12c

Por Yenugula Venkata RaviKumar Oracle ACE e Alex Zaballa Oracle ACE Director
Postado em Março 2016

Revisado por Marcelo Pivovar - Solution Architect

Introdução
O Oracle GoldenGate funciona em um banco de dados Container Database (CDB) da mesma forma que em uma base de dados NON-CDB (arquitetura que era conhecida até a versão 11G), porém, vamos examinar algumas das principais diferenças quando se trata de configurar os processos de extração e replicação para um banco de dados pluggable database (PDB).
Abaixo estão alguns pontos que devemos ter em mente quando lidamos com o Oracle GoldenGate e a arquitetura Multitenant do 12c:

  • Está disponível apenas no modo de captura integrado mas não no modo de captura clássico;
  • Um processo extract pode ser configurado para capturar as alterações de vários bancos de dados pluggable database (PDBs);
  • Devemos usar o modo de captura integrado e um log mining server, que só é acessível a partir do container root (CDB$ROOT);
  • Devemos utilizar um usuário comum para conectar ao log mining server. Em nossos exemplos, será utilizado o usuário C##OGGUSER;
  • O processo Replicat só pode se conectar e aplicar em um único banco de dados pluggable database.

Este artigo irá explicar como configurar o Oracle GoldenGate (OGG) para realizar a replicação unidirecional entre um banco de dados 12c, CDB1 com as Pluggable Databases cdb1pdb1+cdb1pdb2 e um banco de dados 12c CDB2, com as Pluggable Databases cdb2pdb1+cdb2pdb2.

Neste artigo iremos utilizar o seguinte ambiente:


Banco de dados de origem (cdb1)


Banco de dados de 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


Processos do Oracle GoldenGate 12c:


Banco de dados de origem (cdb1)


Banco de dados de destino (cdb2)

  • Manager: Listening port 7809
  • Extract Process-1: ES01
  • Extract Process-2: PS01
  • Extract Process-3: PS02
  • Manager: Listening port 7810
  • Replicat Process-1: RS01
  • Replicat Process-2: RS02


Processos do Oracle GoldenGate no banco de dados de origem (CDB1 com as Pluggable Databases – cdb1pdb1 e cdb1pdb2):

  • Processo Extract (ES01): Este processo irá capturar as transações do log de transações do Oracle com ajuda do log mining server.
  • Processo Extract (PS01 e PS02): Este processo lê um trail file e não o log de transações do banco de dados. 

Processos do Oracle GoldenGate no banco de dados de destino (CDB2 com as Pluggable Databases – cdb2pdb1 e cdb2pdb2):

  • Processo Replicat (RS01 e RS02): Este processo também é conhecido como Integrated Replicat Process.

Instalação do Oracle Database 12c com a opção Multitenant e com múltiplos Pluggable Databases no banco de dados de origem

Passos a serem executados no banco de dados de origem (cdb1):

  • Instalação software do banco de dados 12c do Oracle R1 com o usuário “oracle” no seguinte diretório - ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1;
  • Instalação software do Oracle GoldenGate 12c com o usuário “oracle” no seguinte diretório - GOLDENGATE_HOME=/u01/app/ogg/12g;
  • Criar o banco de dados CDB1 com as pluggable databases cdb1pdb1 e cdb1pdb2 com os sample schemas;
  • Criar os serviços de banco de dados para o CDB1, CDB1PDB1 e CDB1PDB2;
  • Criar os subdiretórios para Oracle GoldenGate 12c no banco de dados de origem (cdb1);
  • Criar e configurar os processos Manager, Extract e Pump para replicação unidirecional entre o banco de dados Oracle 12c CDB1 (pluggable databases cdb1pdb1 e cdb1pdb2) e o banco de dados Oracle 12c CDB2 (pluggable databases cdb2pdb1 e cdb2pdb2);

Criação do container database (cdb1) com dois pluggable databases (cdb1pdb1 e cdb1pdb2)

Description: 12

Instalação do Oracle GolgenGate 12c com o usuário oracle no banco de dados de origem

Selecione a opção “Oracle GoldenGate for Oracle Database 12c (506.0 MB)”

Description: 14

Description: 15

Ao clicar em “Install“ você terá os binários do software do Oracle GoldenGate 12c para Oracle Database 12c instalados no servidor do banco de dados de origem (cdb1).

Conexão ao banco de dados de origem cdb1 como “sysdba”

  • Logar no banco de origem (cdb1) como “sysdba”
  • Criar uma tablespace para o GoldenGate
  • Criar um usuário para o GoldenGate chamado “c##ogguser”
  • Atribuir os privilégios necessários para o usuário “c##ogguser”
  • Adicionar o supplemental logging
  • A package dbms_goldengate_auth.grant_admin_privilege package concede os privilégios adequados para a captura e aplicação

Incluir o parâmetro container, que deve ser setado para ALL:

Exemplo:

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.

Conexão à Pluggable Database cdb1pdb1 como SYS para criar o usuário pdb1user e atribuir as permissões necessárias:

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.



Conexão à Pluggable Database cdb1pdb1 como pdb1user para criar os 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


Conexão à Pluggable Database cdb1pdb2 como SYS para criar o usuário pdb1user e atribuir as permissões necessárias:

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.

 

Conexão à Pluggable Database cdb1pdb2 como pdb1user para criar os 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

 

Configurando o Oracle GoldenGate 12c no banco de dados de origem (Container Database cdb1)

Execute o comando ggsci para entrar na interface de linha de comando do Oracle 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.

 

O seguinte comando irá criar os subdiretórios necessários para o Oracle 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

 

O comando abaixo irá logar no banco de dados como usuário “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.

Conexão ao container root do banco de dados de origem (cdb1)

GGSCI (ggnode1.oracle.com) 6> dblogin userid c##ogguser@cdb1,password oracle
Successfully logged into database CDB$ROOT.

O comando a seguir irá registrar o processo extract (ES01) no banco de dados. Este processo é chamado de Integrated Capture Mode. Neste modo o processo extract (ES01) interage diretamente com o log mining server para receber alterações de dados sob a forma de registros de alterações lógicas (LCR).

GGSCI (ggnode1.oracle.com) 7> register extract es01 DATABASE CONTAINER (cdb1pdb1)
Extract ES01 successfully registered with database at SCN 1751521.

O comando a seguir irá registrar o processo extract (ES01) no banco de dados. Ele irá adicionar o segundo banco de dados pluggable database cdb1pdb2 do container cdb1.

GGSCI (ggnode1.oracle.com) 8> register extract es01 DATABASE ADD CONTAINER (cdb1pdb2)
Extract ES01 successfully registered containers with database at SCN 1782819.

Adição dos processos Extract (ES01) e Data Pump (PS01 & 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

O parâmetro SOURCECATALOG nos permite utilizar a convenção de nomenclatura schema.table.

Os seguintes comandos irão criar e configurar os processos extract (ES01) e pump (PS01 e PS02) com as opções de replicação 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.*;

 

Inicialização do processo Manager no banco de dados de origem (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

Instalação do Oracle Database 12c com a opção Multitenant e com múltiplos Pluggable Databases no banco de dados de destino

Passos a serem executados no banco de dados de destino (cdb2):

  • Instalação software do banco de dados 12c do Oracle R1 com o usuário “oracle” no seguinte diretório - ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1;
  • Instalação software do Oracle GoldenGate 12c com o usuário “oracle” no seguinte diretório - GOLDENGATE_HOME=/u01/app/ogg/12g;
  • Criar o banco de dados CDB2 com as pluggable databases cdb2pdb1 e cdb2pdb2 com os sample schemas;
  • Criar os serviços de banco de dados para o CDB2, CDB2PDB1 e CDB2PDB2;
  • Criar os subdiretórios para Oracle GoldenGate 12c na base de dados de destino (cdb2);

Criação do container database (cdb2) com dois pluggable databases (cdb2pdb1 e cdb2pdb2)

Description: 13

Instalação do Oracle GolgenGate 12c com o usuário oracle no banco de dados de destino

Selecione a opção “Oracle GoldenGate for Oracle Database 12c (506.0 MB)”

Description: 14

Description: 15

Ao clicar em “Install“ você terá os binários do software do Oracle GoldenGate 12c para Oracle Database 12c instalados no servidor do banco de dados de destino (cdb2).

Conexão ao banco de dados de destino cdb2 como “sysdba”

  • Logar no banco de destino (cdb2) como “sysdba”
  • Criar uma tablespace para o GoldenGate
  • Criar um usuário para o GoldenGate chamado “c##ogguser”
  • Atribuir os privilégios necessários para o usuário “c##ogguser”
  • Adicionar o supplemental logging
  • A package dbms_goldengate_auth.grant_admin_privilege package concede os privilégios adequados para a captura e aplicação

Incluir o parâmetro container, que deve ser setado para ALL:

Exemplo:

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.

Conexão à Pluggable Database cdb2pdb1 como SYS para criar o usuário pdb1user e atribuir as permissões necessárias:

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.

Conexão à Pluggable Database cdb2pdb1 como pdb1user para criar os objetos:

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.

Conexão à Pluggable Database cdb2pdb2 como SYS para criar o usuário pdb1user e atribuir as permissões necessárias:

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.

Conexão à Pluggable Database cdb2pdb2 como pdb1user para criar os objetos:

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 o Oracle GoldenGate 12c no banco de dados de destino (Container Database 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

Conexão à Pluggable Database cdb2pdb1 como “c##ogguser”

GGSCI (ggnode2.oracle.com) 1> dblogin userid c##ogguser@cdb2pdb1,password oracle
Successfully logged into database CDB2PDB1.
 

O seguinte comando irá adicionar processo replicat (RS01) para a pluggable database pdb1 do cdb2

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

Conexão à Pluggable Database cdb2pdb2 como “c##ogguser”

GGSCI (ggnode2.oracle.com) 3> dblogin userid c##ogguser@cdb2pdb2,password oracle
Successfully logged into database CDB2PDB2.
 

O seguinte comando irá adicionar processo replicat (RS01) para a pluggable database cdb2pdb2 do cdb2.

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

Criação e configuração de dois processos replicat para duas pluggable databases cdb2pdb1 e 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.*;

Inicialização dos processos Manager e Replicat no banco de dados de destino (cdb2) 

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

Verificando o estado dos processos Manager e Replicat (RS01 & RS02) no banco de dados de 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>

Conexão ao Oracle GoldenGate para o banco de dados de origem (ggnode1)

Inicialização dos processos Manager e Extract (ES01 & ES02) no banco de dados de origem (cdb1)

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

 

Verificando o estado dos processos Manager e Extract (ES01 & ES02) no banco de dados de origem

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

Nota: O processo Extract (ES01) ainda relata o status “STARTING” após a execução do comando info all. O processo Extract (ES01) está rodando em Integrated Capture Mode que requer um tempo de inicialização maior.

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

Conexão ao banco de dados de origem cdb1 na pluggable databasecdb1pdb1 para fazer algumas alterações na tabela Inventory

Conexão ao banco de dados de origem cdb1 na pluggable databasecdb1pdb2 para fazer algumas alterações na tabela Inventory

Conexão a interface de linha de comandos do GoldenGate no banco de origem para verificar as estatísticas do processo extract (ES01) e verificar o total de operações

Description: 20

Conexão a interface de linha de comandos do GoldenGate no banco de origem para verificar as estatísticas do processo pump (PS01 e PS02) e verificar o total de operações

Description: 21

Conexão a interface de linha de comandos do GoldenGate no banco de destino para verificar as estatísticas do processo replicat (RS01) e verificar o total de operações

Description: 22

Conexão a interface de linha de comandos do GoldenGate no banco de destino para verificar as estatísticas do processo replicat (RS02) e verificar o total de operações

Description: 23

Todas as Pluggable Databases (PDBs) que pertencem ao mesmo Container Database (CDB) compartilham o mesmo redo stream. Com isso, o Oracle GoldenGate precisa filtrar os redo records para as PDBs que não são necessários. Ao mesmo tempo que cada Pluggable Database (PDB) tem o seu próprio dicionário de dados, o GoldenGate precisa controlar cada um deles.

 


Yenugula Venkata Ravikumar é um DBA com mais de 15 anos de experiencia com Oracle e em ambientes de alta disponibilidade (RAC, Data Guard, dentre outros), tuning e desempenho, migrações, backup e recover, Oracle Exadata X2 e X3, é Expert em sistemas operacionais tais como como AIX, HP-UX e Linux. Já participou como conferencista de Oracle pela India, onde mora atualmente. Obteve o título de "Oracle Certified Master (OCM 10g)" em 2009.

Alex Zaballa, formado em Análise de Sistemas, é especialista em Banco de Dados Oracle com sólidos conhecimentos em Servidores de Aplicação e Sistemas Operacionais; trabalha com Oracle há 15 anos, é Oracle ACE Director, certificado OCM Database 11G/Cloud e conta com mais de 190 outras certificações em produtos da Oracle. Alex também é fundador do Grupo de Usuários Oracle de Angola (GUOA) e membro do time OraWorld.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.