Olá pessoal, como estão?
Espero que todos estejam muito bem.
Eu já publiquei uma série de artigos de GoldenGate a algum tempo atrás - Parte 1, Parte 2, Parte 3 e Parte 4.
Só que lá, confesso, o texto ficou um pouco grande e também muito pulverizado.
Outro ponto é que a instalação era feita via linha de comando, enfim, chegou o momento de fazer algo mais direto.
Não vou detalhar comando a comando, acho desnecessário.
Mas os nomes e processos são bem intuitivos, então basta dar uma olhada nos manuais aqui que você será feliz, tenho certeza.
Mas os nomes e processos são bem intuitivos, então basta dar uma olhada nos manuais aqui que você será feliz, tenho certeza.
Vamos começar.
====================================================================
-- Versões e downloads
====================================================================
- Sistema Operacional: Oracle Linux 6.5
- Bases de dados: GGPRD e GGCOPY
- Versão do Oracle: 11.2.0.4
- Versão do Oracle: 11.2.0.4
- Versão do GG: 12.2.0.1.1
- Usuário do GG: dbagate Senha: aaa123
- Usuário a ser replicado: SCOTT Senha: aaa123
- Download do GG: Aqui
Nosso instalador, ficará nesse local: /home/oracle/GoldenGate
====================================================================
-- Instalação do GG (SOURCE e TARGET)
====================================================================
1) Criar o GG_HOME.
mkdir -p /oracle/app/oracle/product/11.2.0/gghome
2) Descompactar o instalador e iniciar a instalação
cd /home/oracle/GoldenGate
unzip fbo_ggs_Linux_x64_shiphome.zip
cd /home/oracle/GoldenGate/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller
Abaixo a sequência de telas da instalação:
3) Adicionar o GG_HOME ao bash_profile
cd ~
vi .bash_profile
GG_HOME=/oracle/app/oracle/product/11.2.0/gghome
4) Agora é só testar a instalação
cd $GG_HOME
./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401_FBO
Linux, x64, 64bit (optimized), Oracle 12c on Dec 12 2015 02:56:48
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2015, Oracle and/or its affiliates. All
rights reserved.
rights reserved.
GGSCI (rac12c1) 2> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
5) Caso seja necessário, alterar a porta do manager
GGSCI (rac12c1) 3> stop manager
edit params mgr
PORT 7889
start manager
====================================================================
-- Preparação das bases (SOURCE e TARGET)
====================================================================
1) Pré-requisitos que devem ser configurados
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER SYSTEM SET STREAMS_POOL_SIZE=256M SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE SCOPE=SPFILE;
ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;ALTER SYSTEM SET STREAMS_POOL_SIZE=256M SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
SELECT SUPPLEMENTAL_LOG_DATA_MIN,LOG_MODE FROM V$DATABASE;
Importante: as bases devem estar em modo Archive.
2) Criar user, tablespace para o GG e liberar os grant's
-- GGPRD CREATE TABLESPACE GGATE datafile '/u01/oradata/ggprd/ggate01.dbf' SIZE 1G AUTOEXTEND on NEXT 512M maxsize 8G; -- GGCOPY CREATE TABLESPACE GGATE datafile '/u01/oradata/ggcopy/ggate01.dbf' SIZE 1G AUTOEXTEND on NEXT 512M maxsize 8G; CREATE USER DBAGATE IDENTIFIED BY aaa123 DEFAULT TABLESPACE GGATE TEMPORARY TABLESPACE TEMP; GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO DBAGATE; GRANT EXECUTE ON UTL_FILE TO DBAGATE; GRANT DBA TO dbagate; GRANT SELECT ANY DICTIONARY TO dbagate; GRANT EXECUTE ON dbms_flashback TO dbagate;
3) Criar a estrutura interna do GG. Para isso, devemos estar no diretório do HOME_GATE
cd $GGHOME
@marker_setup.sql
Enter Oracle GoldenGate schema name: dbagate
@ddl_setup.sql
Enter Oracle GoldenGate schema name: dbagate
@role_setup.sql
Enter GoldenGate schema name: dbagate
Liberar o GRANT para o user do GG
GRANT GGS_GGSUSER_ROLE TO dbagate
@ddl_enable.sql
4) Criar os diretórios
./ggsci
GGSCI (rac12c1) 4> create subdirs
5) Preparando a tabela de checkpoint e registrando as informações do schema a ser replicado
GGSCI (rac12c1) 5> EDIT PARAMS ./GLOBALS
GGSCI (rac12c1) 6> GGSCHEMA DBAGATE
GGSCI (rac12c1) 7> CHECKPOINTTABLE DBAGATE.checkpoint
-- Precisamos estar logados com o dbagate nesse ponto
GGSCI (rac12c1) 8> DBLOGIN USERID dbagate, PASSWORD aaa123
GGSCI (rac12c1) 9> ADD CHECKPOINTTABLE dbagate.checkpoint
GGSCI (rac12c1) 10> ADD SCHEMATRANDATA scott ALLCOLS
============================================================
Somente no source
=============================================================
4) Criar os diretórios
./ggsci
GGSCI (rac12c1) 4> create subdirs
5) Preparando a tabela de checkpoint e registrando as informações do schema a ser replicado
GGSCI (rac12c1) 5> EDIT PARAMS ./GLOBALS
GGSCI (rac12c1) 6> GGSCHEMA DBAGATE
GGSCI (rac12c1) 7> CHECKPOINTTABLE DBAGATE.checkpoint
-- Precisamos estar logados com o dbagate nesse ponto
GGSCI (rac12c1) 8> DBLOGIN USERID dbagate, PASSWORD aaa123
GGSCI (rac12c1) 9> ADD CHECKPOINTTABLE dbagate.checkpoint
GGSCI (rac12c1) 10> ADD SCHEMATRANDATA scott ALLCOLS
============================================================
Somente no source
=============================================================
1) Configurar o extract. Ele é responsável pela extração dos dados que serão replicados e vai gerar os trailfiles localmente.
GGSCI (rac12c1) 1> dblogin userid dbagate, password aaa123
GGSCI (rac12c1) 2> add extract extract1, tranlog, begin now
GGSCI (rac12c1) 3>
add exttrail /oracle/app/oracle/product/11.2.0/gghome/dirdat/lt, extract extract1, megabytes 50
GGSCI (rac12c1) 4>
add rmttrail /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, extract extract1, megabytes 50
GGSCI (rac12c1) 5> edit params extract1
extract extract1
userid dbagate@GGPRD, password aaa123
EXTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/lt
TRANLOGOPTIONS EXCLUDEUSER DBAGATE
GETTRUNCATES
ddl include mapped objname scott.*;
table SCOTT.*;
GGSCI (rac12c1) 6> info extract extract1, detail
2) Configurar o datapump. Ele é responsável pela envio dos trailfiles para o servidor remoto.
GGSCI (rac12c1) 7> ADD EXTRACT dtpump1, EXTTRAILSOURCE /oracle/app/oracle/product/11.2.0/gghome/dirdat/lt, BEGIN now
GGSCI (rac12c1) 8>
ADD RMTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, EXTRACT dtpump1, megabytes 50
GGSCI (rac12c1) 9> edit params dtpump1
EXTRACT dtpump1
RMTHOST 192.168.1.32, mgrport 7809
RMTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt
PASSTHRU
GETTRUNCATES
TABLE SCOTT.*;
GGSCI (rac12c1) 10> info all
============================================================
Somente no target
=============================================================
1) Adicionar o replicat
./ggsci
GGSCI (rac12c2) 1> dblogin userid dbagate; password aaa123
GGSCI (rac12c2) 2> add replicat replic1, exttrail /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, begin now, CHECKPOINTTABLE dbagate.checkpoint,
GGSCI (rac12c2) 3> edit params replic1
REPLICAT replic1
ASSUMETARGETDEFS
GETTRUNCATES
HANDLECOLLISIONS
USERID dbagate, PASSWORD aaa123
discardfile /oracle/app/oracle/product/11.2.0/gghome/dircrd/replic1_discard.txt, append, megabytes 50
MAP SCOTT.*, TARGET SCOTT.*;
DDL INCLUDE ALL
DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 10 RETRYDELAY 30
GGSCI (rac12c2) 4> info all
============================================================
Iniciar os serviços do SOURCE
=============================================================
./ggsci
GGSCI (rac12c1) 1> dblogin userid dbagate; password aaa123
GGSCI (rac12c1) 2> start er *
GGSCI (rac12c1) 3> info all
GGSCI (rac12c1) 4> info extract extract1, detail
GGSCI (rac12c1) 5> info extract dtpump1, detail
GGSCI (rac12c1) 6> stats extract extract1
============================================================
Migrar o schema do source para o target - INITIAL LOAD
=============================================================
Nesse ponto iremos executar a carga inicial (INITIAL LOAD) no target.
Essa etapa pode ser feita de várias formas. Poderíamos somente criar a estrutura de tabelas no target e fazer um INITIAL LOAD via GoldenGate mesmo. Ou fazer via EXPDP/IMPDP.
Eu prefiro sempre fazer via EXPDP/IMPDP. Então é essa forma que vamos utilizar.
1) Identificando o scn
SELECT TO_CHAR(CURRENT_SCN) FROM V$DATABASE;
No nosso exemplo, o SCN sera esse: 970349
2) Executar o EXPDP com FLASHBACK_SCN no source
expdp \"/ as sysdba\" directory=EXPDP_DIR DUMPFILE=SCOTT_%U.dmp LOGFILE=scott.log owner=scott filesize=8192m FLASHBACK_SCN=970349
3) Realizar o IMPDP no target
impdp \"/ as sysdba\" directory=EXPDP_DIR dumpfile=SCOTT_1.dmp logfile=impdp.log SCHEMAS='SCOTT'
============================================================
Somente no target
=============================================================
1) Iniciar o replicat. Esse processo é o responsável por ler e aplicar os trailfiles enviados pelo processo datapump do source.
./ggsci
GGSCI (rac12c2) 1> dblogin userid dbagate; password aaa123
GGSCI (rac12c2) 2> start er *
Importante:
Caso queira iniciar a partir do SCN (eu acho mais seguro)
GGSCI (rac12c2) 3> info all
GGSCI (rac12c2) 4> info replicat replic1, detail
GGSCI (rac12c2) 5> stats REPLICAT replic1, total, hourly, reportrate min
Agora meus queridos, basta executar os testes na origem e ver a mágica acontecer no destino.
Lembre-se que esse é um cenário simples, porém um cenário maior acaba seguindo os mesmos passos. Consulte o manual, são opções diversas para replicação.
Espero que gostem.
Abraço
Mario
GGSCI (rac12c1) 7> ADD EXTRACT dtpump1, EXTTRAILSOURCE /oracle/app/oracle/product/11.2.0/gghome/dirdat/lt, BEGIN now
GGSCI (rac12c1) 8>
ADD RMTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, EXTRACT dtpump1, megabytes 50
GGSCI (rac12c1) 9> edit params dtpump1
EXTRACT dtpump1
RMTHOST 192.168.1.32, mgrport 7809
RMTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt
PASSTHRU
GETTRUNCATES
TABLE SCOTT.*;
GGSCI (rac12c1) 10> info all
============================================================
Somente no target
=============================================================
1) Adicionar o replicat
./ggsci
GGSCI (rac12c2) 1> dblogin userid dbagate; password aaa123
GGSCI (rac12c2) 2> add replicat replic1, exttrail /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, begin now, CHECKPOINTTABLE dbagate.checkpoint,
GGSCI (rac12c2) 3> edit params replic1
REPLICAT replic1
ASSUMETARGETDEFS
GETTRUNCATES
HANDLECOLLISIONS
USERID dbagate, PASSWORD aaa123
discardfile /oracle/app/oracle/product/11.2.0/gghome/dircrd/replic1_discard.txt, append, megabytes 50
MAP SCOTT.*, TARGET SCOTT.*;
DDL INCLUDE ALL
DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 10 RETRYDELAY 30
GGSCI (rac12c2) 4> info all
============================================================
Iniciar os serviços do SOURCE
=============================================================
./ggsci
GGSCI (rac12c1) 1> dblogin userid dbagate; password aaa123
GGSCI (rac12c1) 2> start er *
GGSCI (rac12c1) 3> info all
GGSCI (rac12c1) 4> info extract extract1, detail
GGSCI (rac12c1) 5> info extract dtpump1, detail
GGSCI (rac12c1) 6> stats extract extract1
============================================================
Migrar o schema do source para o target - INITIAL LOAD
=============================================================
Nesse ponto iremos executar a carga inicial (INITIAL LOAD) no target.
Essa etapa pode ser feita de várias formas. Poderíamos somente criar a estrutura de tabelas no target e fazer um INITIAL LOAD via GoldenGate mesmo. Ou fazer via EXPDP/IMPDP.
Eu prefiro sempre fazer via EXPDP/IMPDP. Então é essa forma que vamos utilizar.
1) Identificando o scn
SELECT TO_CHAR(CURRENT_SCN) FROM V$DATABASE;
No nosso exemplo, o SCN sera esse: 970349
2) Executar o EXPDP com FLASHBACK_SCN no source
expdp \"/ as sysdba\" directory=EXPDP_DIR DUMPFILE=SCOTT_%U.dmp LOGFILE=scott.log owner=scott filesize=8192m FLASHBACK_SCN=970349
3) Realizar o IMPDP no target
impdp \"/ as sysdba\" directory=EXPDP_DIR dumpfile=SCOTT_1.dmp logfile=impdp.log SCHEMAS='SCOTT'
============================================================
Somente no target
=============================================================
1) Iniciar o replicat. Esse processo é o responsável por ler e aplicar os trailfiles enviados pelo processo datapump do source.
./ggsci
GGSCI (rac12c2) 1> dblogin userid dbagate; password aaa123
GGSCI (rac12c2) 2> start er *
Importante:
Caso queira iniciar a partir do SCN (eu acho mais seguro)
GGSCI (rac12c2) 2> start replicat replic1, ATCSN 970349
GGSCI (rac12c2) 3> info all
GGSCI (rac12c2) 4> info replicat replic1, detail
GGSCI (rac12c2) 5> stats REPLICAT replic1, total, hourly, reportrate min
Agora meus queridos, basta executar os testes na origem e ver a mágica acontecer no destino.
Lembre-se que esse é um cenário simples, porém um cenário maior acaba seguindo os mesmos passos. Consulte o manual, são opções diversas para replicação.
Espero que gostem.
Abraço
Mario
Ótimo artigo. Simplificado e objetivo.Obrigado
ResponderExcluirQue bom que gostou Marcelo. A ideia é essa, falar de coisas simples e do dia a dia de forma bem objetiva.
ResponderExcluirAbraço