Por Yenugula Venkata RaviKumar e Alex Zaballa
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:
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:
|
|
1. Oracle Enterprise Linux 5.8 (x86-64) | 1. Oracle Enterprise Linux 5.8 (x86-64) |
Processos do Oracle GoldenGate 12c:
|
|
|
|
Processos do Oracle GoldenGate no banco de dados de origem (CDB1 com as Pluggable Databases – cdb1pdb1 e cdb1pdb2):
Processos do Oracle GoldenGate no banco de dados de destino (CDB2 com as Pluggable Databases – cdb2pdb1 e cdb2pdb2):
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):
Criação do container database (cdb1) com dois pluggable databases (cdb1pdb1 e cdb1pdb2)
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)”
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”
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):
Criação do container database (cdb2) com dois pluggable databases (cdb2pdb1 e cdb2pdb2)
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)”
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”
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
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
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
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
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.