Artigos
Desempenho e Disponibilidade de Banco de dados
Por Yenugula Venkata RaviKumar e David Siqueira
Postado em Março 2016
Revisado por Marcelo Pivovar - Solution Architect
Introdução:
A funcionalidade e a metodologia do Oracle Golden Gate em um multitenant container database (cdb) funciona tanto para single instances, como instancias de baco de dados em cluster. As funções irão mudar quando você estiver trabalhando em processos de extração, processos de replicação em um pluggable database (pdb) dentro de ambientes em container database (cdb).
Em um multitenant, o container database irá ter domínio sobre os redo/archived logs, desta mesma forma o fluxo de redo será compartilhado por todos os pluggable databases (pdb) dentro do container database (cdb).
Alguns pontos cruciais para se ter em mente quando se lida com OGG e arquitetura 12c Multitenant.
Este artigo explica como configurar o software Oracle GoldenGate (OGG) para realizar uma replicação bidirecional entre a Oracle Database 12c (banco de dados db1 com Pluggable (db1pdb)) e Oracle Database 12c (DB2) com banco de dados Pluggable (db2pdb). Para este exercício, os detalhes estão apresentados abaixo:
|
|
1. Oracle Enterprise Linux 5.8 (x86-64) | 1. Oracle Enterprise Linux 5.8 (x86-64) |
Arquitetura do Bi-Direcional entre pluggable databases em Container Database:

Oracle GoldenGate 12c - processos nas bases de dados de origem e destino.
Oracle GoldenGate Processos na Base de dados de Origem | Oracle GoldenGate Processos na Base de Dados |
|
|
Série de passos para a Base de dados de Origem (db1):
ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1

Instalando o Oracle GoldenGate 12c como ‘oracle’ no banco de dados de origem (db1)
Escolha a opção “Oracle GoldenGate for Oracle Database 12c (506.0 MB)”

Defina o caminho para o Oracle GoldenGate: /u01/app/ogg/12g

Instalação realizada com sucesso dos binários do Oracle GoldenGate 12c para o banco de dados Oracle 12c na origem (db1).
Configurando o Oracle GoldenGate 12c no banco de dados do container de origem (db1)
Execute o comando ggsci para logar na interface de linha de comando do 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 a seguir irá criar os subdiretórios requeridos para o ambiente Oracle GoldenGate
GGSCI (ggnode1.oracle.com) 2> CREATE SUBDIRS
Creating subdirectories under current directory /u01/app/ogg/12g
Parameter files /u01/app/ogg/12g/dirprm: created 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 GGSCI (ggnode1.oracle.com) 2> exit
Conecte-se no banco de dados do container de origem (db1) como ‘sysdba’
[oracle@ggnode1 12g]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Tue Jun 9 14:18:27 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect sys/oracle@192.168.56.105:1521/db1 as sysdba Connected.
SQL> CREATE TABLESPACE GOLDENGATE DATAFILE '/u01/app/oracle/oradata/db1/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; Grant succeeded.
SQL> GRANT SELECT ANY DICTIONARY 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> alter user c##ogguser default tablespace users container=all; User altered.
SQL> alter user c##ogguser quota unlimited on users container=all; User altered.
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; Database altered.
SQL> ALTER SYSTEM SWITCH LOGFILE; System altered.
SQL> ALTER DATABASE FORCE LOGGING; Database altered.
SQL> ALTER SYSTEM SWITCH LOGFILE; System altered.
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, LOG_MODE,FORCE_LOGGING FROM v$database;
SUPPLEME LOG_MODE FORCE_LOGGING -------- ------------ --------------------------------------- YES ARCHIVELOG YES

Conceda os privilégios para o usuário ‘C##OGGUSER’ no container do banco de dados de origem
SQL> exec dbms_goldengate_auth.grant_admin_privilege('C##OGGUSER',container=> 'all')
PL/SQL procedure successfully completed. SQL> connect sys/oracle@192.168.56.105:1521/db1pdb as sysdba Connected.
SQL> alter user scott identified by oracle account unlock; User altered.
SQL> connect scott/oracle@192.168.56.105:1521/db1pdb 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.
Conecte-se no Oracle GoldenGate 12c no banco de dados do container de origem (db1)
[oracle@ggnode1 ~]$ source 12c.env [oracle@ggnode1 ~]$ cd $GG [oracle@ggnode1 12g]$ pwd /u01/app/ogg/12g
GGSCI (ggnode1.oracle.com) 4> dblogin userid c##ogguser@db1pdb, password oracle Successfully logged into database DB1PDB.
GGSCI (ggnode1.oracle.com) 5> ADD SCHEMATRANDATA SCOTT ALLCOLS
2015-05-28 15:43:13 INFO OGG-01788 SCHEMATRANDATA has been added on schema SCOTT. 2015-05-28 15:43:13 INFO OGG-01976 SCHEMATRANDATA for scheduling columns has been added on schema SCOTT. 2015-05-28 15:43:13 INFO OGG-01977 SCHEMATRANDATA for all columns has been added on schema SCOTT.
GGSCI (ggnode1.oracle.com) 6> dblogin userid c##ogguser@db1, password oracle Successfully logged into database CDB$ROOT.
GGSCI (ggnode1.oracle.com) 8> register extract escott database container (db1pdb) Extract ESCOTT successfully registered with database at SCN 1754059.
GGSCI (ggnode1.oracle.com) 9> ADD EXTRACT escott INTEGRATED TRANLOG, BEGIN NOW EXTRACT added.
GGSCI (ggnode1.oracle.com) 10> ADD EXTTRAIL ./dirdat/lt EXTRACT escott EXTTRAIL added.
GGSCI (ggnode1.oracle.com) 11> ADD EXTRACT pscott EXTTRAILSOURCE ./dirdat/lt BEGIN NOW EXTRACT added.
GGSCI (ggnode1.oracle.com) 12> ADD RMTTRAIL ./dirdat/rt EXTRACT pscott RMTTRAIL added.
GGSCI (ggnode1.oracle.com) 13> edit param mgr GGSCI (ggnode1.oracle.com) 14> view param mgr PORT 7809
Veja o uso do parâmetro de SOURCECATALOG no arquivo de parâmetros de extração..
SOURCECATALOG especifica um container padrão no Oracle multitenant container database para instruções subsequentes de TABELAS ou SEQUENCIAS. Permite o uso de um legado de duas partes de convenções de nomenclatura (schema.object) onde os nomes de três partes de outra forma seriam necessários para esses bancos de dados.
GGSCI (ggnode1.oracle.com) 10> view param escott EXTRACT escott USERID C##OGGUSER@db1, PASSWORD oracle LOGALLSUPCOLS UPDATERECORDFORMAT COMPACT EXTTRAIL ./dirdat/lt SOURCECATALOG db1pdb TABLE scott.*;
GGSCI (ggnode1.oracle.com) 11> view param pscott
EXTRACT pscott USERID C##OGGUSER@db1, PASSWORD oracle RMTHOST ggnode2, MGRPORT 7810 RMTTRAIL ./dirdat/rt SOURCECATALOG db1pdb TABLE scott.*;
GGSCI (ggnode1.oracle.com) 9> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING EXTRACT STARTING ESCOTT 00:00:00 00:26:21 EXTRACT RUNNING PSCOTT 00:00:00 00:00:03
GGSCI (ggnode1.oracle.com) 10> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING EXTRACT RUNNING ESCOTT 00:13:01 00:00:00 EXTRACT RUNNING PSCOTT 00:00:00 00:00:03
Instalando o Oracle GoldenGate 12c com o usuário ‘oracle’ no banco de dados do container de destino (db2)
Série de passos para Base de dados de Destino (db2):
ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1

Escolha a opção “Oracle GoldenGate para Oracle Database 12c”

Escolha a localização do Software u01/app/ogg/12g

Instalação realizada com sucesso dos Binários do Oracle GoldenGate 12c para o banco de dados Oracle 12c no container do banco de dados de destino (db2).
[oracle@ggnode2 ~]$ source 12c.env [oracle@ggnode2 ~]$ cd $GG [oracle@ggnode2 12g]$ pwd /u01/app/ogg/12g
Execute o comando ggsci para logar na interface de linha de comando do GoldenGate (GGSCI)
[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.
O seguinte comando irá criar os subdiretórios requeridos para o ambiente de Oracle GoldenGate
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 GGSCI (ggnode2.oracle.com) 2> exit
Conecte-se no banco de dados de destino, verifique o archivelog mode e crie o usuário ‘c##ogguser’ com os requeridos privilégios como ‘sysdba’
[oracle@ggnode2 12g]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Tue Jun 9 14:34:18 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect sys/oracle@192.168.56.106:1521/db2 as sysdba Connected.
SQL> CREATE TABLESPACE GOLDENGATE DATAFILE '/u01/app/oracle/oradata/db2/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 SELECT ANY DICTIONARY 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> alter user c##ogguser default tablespace users container=all; User altered.
SQL> alter user c##ogguser quota unlimited on users container=all; User altered.
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; Database altered.
SQL> ALTER SYSTEM SWITCH LOGFILE; System altered.
SQL> ALTER DATABASE FORCE LOGGING; Database altered.
SQL> ALTER SYSTEM SWITCH LOGFILE; System altered.
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, LOG_MODE,FORCE_LOGGING FROM v$database;
SUPPLEME LOG_MODE FORCE_LOGGING -------- ------------ --------------------------------------- YES ARCHIVELOG YES
Conceda os privilégios para o usuário ‘C##OGGUSER’ no container do banco de dados de destino
SQL> exec dbms_goldengate_auth.grant_admin_privilege('C##OGGUSER',container=> 'all');
PL/SQL procedure successfully completed. SQL> connect sys/oracle@192.168.56.106:1521/db2pdb as sysdba Connected.
SQL> alter user scott identified by oracle account unlock; User altered.
SQL> connect scott/oracle@192.168.56.106:1521/db2pdb 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.
Conecte-se no Oracle GoldenGate 12c no Banco de dados do servidor de Destino
[oracle@ggnode2 ~]$ source 12c.env [oracle@ggnode2 ~]$ cd $GG [oracle@ggnode2 12g]$ pwd /u01/app/ogg/12g
GGSCI (ggnode2.oracle.com) 3> dblogin userid c##ogguser@db2pdb, password oracle Successfully logged into database DB2PDB.
GGSCI (ggnode2.oracle.com) 4> ADD SCHEMATRANDATA SCOTT ALLCOLS
2015-05-28 15:43:18 INFO OGG-01788 SCHEMATRANDATA has been added on schema SCOTT. 2015-05-28 15:43:18 INFO OGG-01976 SCHEMATRANDATA for scheduling columns has been added on schema SCOTT. 2015-05-28 15:43:18 INFO OGG-01977 SCHEMATRANDATA for all columns has been added on schema SCOTT.
GGSCI (ggnode2.oracle.com) 5> dblogin userid c##ogguser@db2, password oracle Successfully logged into database CDB$ROOT.
GGSCI (ggnode2.oracle.com) 6> ADD REPLICAT rscott INTEGRATED EXTTRAIL ./dirdat/rt REPLICAT (Integrated) added.
GGSCI (ggnode2.oracle.com) 7> edit param rscott GGSCI (ggnode2.oracle.com) 8> view param rscott
REPLICAT rscott DBOPTIONS INTEGRATEDPARAMS(parallelism 6) USERID C##OGGUSER@db2pdb, PASSWORD oracle ASSUMETARGETDEFS MAP db1pdb.scott.*, TARGET db2pdb.scott.*;
GGSCI (ggnode2.oracle.com) 7> edit param mgr GGSCI (ggnode2.oracle.com) 15> view param mgr PORT 7810
GGSCI (ggnode2.oracle.com) 8> start mgr Manager started.
GGSCI (ggnode2.oracle.com) 9> start replicat rscott Sending START request to MANAGER ... REPLICAT RSCOTT starting
GGSCI (ggnode2.oracle.com) 10> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING REPLICAT STARTING RSCOTT 00:00:00 00:01:08
GGSCI (ggnode2.oracle.com) 11> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING REPLICAT RUNNING RSCOTT 00:00:00 00:00:07
Conecte-se no servidor do bando de dados de origem (Pluggable Database- db1pdb) como scott e execute algumas transações e verifique se o pluggable database de destino (db2pdb) receberam ou não essas transações.

Convertendo de Uni-Directional para Bi-Directional em Pluggable Databases entre db1pdb e db2pdb no ambiente Multitenant
Conecte-se no ambiente Oracle GoldenGate no servidor de destino (db2) e extraia o processo para o Bi-directional
GGSCI (ggnode2.oracle.com) 4> dblogin userid c##ogguser@db2, password oracle Successfully logged into database CDB$ROOT.
GGSCI (ggnode2.oracle.com) 14> register extract es01 database container(db2pdb) Extract ES01 successfully registered with database at SCN 1751950.
GGSCI (ggnode2.oracle.com) 15> add extract es01 integrated tranlog, begin now EXTRACT added.
GGSCI (ggnode2.oracle.com) 16> add exttrail ./dirdat/ea extract es01 EXTTRAIL added.
GGSCI (ggnode2.oracle.com) 17> add extract ps01 exttrailsource ./dirdat/ea begin now EXTRACT added.
GGSCI (ggnode2.oracle.com) 18> add rmttrail ./dirdat/pa extract ps01 RMTTRAIL added.
GGSCI (ggnode2.oracle.com) 19> edit param es01 GGSCI (ggnode2.oracle.com) 20> view param es01
extract es01 userid c##ogguser@db2, password oracle LOGALLSUPCOLS UPDATERECORDFORMAT COMPACT EXTTRAIL ./dirdat/ea SOURCECATALOG db2pdb TABLE scott.*;
GGSCI (ggnode2.oracle.com) 21> edit param ps01 GGSCI (ggnode2.oracle.com) 22> view param ps01
EXTRACT ps01 userid c##ogguser@db2, password oracle rmthost ggnode1, mgrport 7809 rmttrail ./dirdat/pa SOURCECATALOG db2pdb TABLE scott.*;
GGSCI (ggnode2.oracle.com) 23> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING EXTRACT STOPPED ES01 00:00:00 00:01:55 EXTRACT STOPPED PS01 00:00:00 00:01:28 REPLICAT RUNNING RSCOTT 00:00:00 00:00:05
GGSCI (ggnode2.oracle.com) 24> start es01 Sending START request to MANAGER ... EXTRACT ES01 starting
GGSCI (ggnode2.oracle.com) 25> start ps01 Sending START request to MANAGER ... EXTRACT PS01 starting
GGSCI (ggnode2.oracle.com) 26> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING EXTRACT STARTING ES01 00:00:00 00:02:08 EXTRACT RUNNING PS01 00:00:00 00:01:41 REPLICAT RUNNING RSCOTT 00:00:00 00:00:08
GGSCI (ggnode2.oracle.com) 27> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING EXTRACT RUNNING ES01 00:00:06 00:00:08 EXTRACT RUNNING PS01 00:00:00 00:00:03 REPLICAT RUNNING RSCOTT 00:00:00 00:00:05
Conecte-se no ambiente de Oracle GoldenGate no servidor de banco de dados de origem (db1) e replique o processo para o Bi-directional
GGSCI (ggnode1.oracle.com) 22> dblogin userid c##ogguser@db1, password oracle Successfully logged into database CDB$ROOT.
GGSCI (ggnode1.oracle.com) 23> ADD REPLICAT rs01 INTEGRATED EXTTRAIL ./dirdat/pa REPLICAT (Integrated) added.
GGSCI (ggnode1.oracle.com) 24> edit param rs01 GGSCI (ggnode1.oracle.com) 25> view param rs01
replicat rs01 DBOPTIONS INTEGRATEDPARAMS(parallelism 6) userid c##ogguser@db1pdb, password oracle ASSUMETARGETDEFS map db2pdb.scott.*, target db1pdb.scott.*;
GGSCI (ggnode1.oracle.com) 26> start rs01 Sending START request to MANAGER ... REPLICAT RS01 starting
GGSCI (ggnode1.oracle.com) 27> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING EXTRACT RUNNING ESCOTT 00:00:06 00:00:03 EXTRACT RUNNING PSCOTT 00:00:00 00:00:04 REPLICAT RUNNING RS01 00:00:00 00:00:46
Conecte-se no Servidor de Banco de Dados do Destino (Pluggable Database- db2pdb) com usuário scott e execute algumas transações e verifique se as transações foram recebidas no pluggable database de origem (db1pdb) ou não.

Verifique as estatísticas para todos os processos nos Servidores de bancos de dados de Origem e Destino
GGSCI (ggnode1.oracle.com) 31> stats escott, total GGSCI (ggnode1.oracle.com) 32> stats pscott, total GGSCI (ggnode1.oracle.com) 33> stats rs01, total
GGSCI (ggnode2.oracle.com) 31> stats es01, total GGSCI (ggnode2.oracle.com) 32> stats ps01, total GGSCI (ggnode2.oracle.com) 33> stats rscott, total
Resumo: Oracle GoldenGate funciona de maneira similar em ambientes Multitenant, single instance & cluster instances contanto que sejam adicionados os processos de extração e replicação baseados no tipo de replicação, sejam eles uni-direcional ou bi-direcional.
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.
David Siqueira é DBA desde 2001, atuante no mercado de São Paulo Brasil, trabalhou nas principais consultorias sempre buscando melhorar conhecimentos e agregar valor aos ambientes por onde passou, é OCP 10 e 11g, OCE SQL Expert, OCE RAC 10g, OCE Exadata Essentials e foi nomeado Oracle ACE em Dezembro de 2011. Atua com ambientes de Alta Disponibilidade Oracel RAC 11g, Exadata X2-2 e Administração de Banco de Dados em Geral. Também possui conhecimentos em sistemas operacionais Oracle VM server e Oracle Businnes Intelligence.
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.