Oracle Zero Downtime Migration (com Golden Gate) 1 Ricardo Portilho Proni [email protected]Esta obra está licenciada sob a licença Creative Commons Atribuição-SemDerivados 3.0 Brasil. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nd/3.0/br/.
59
Embed
Workshop Oracle Zero Downtime Migration (com Golden Gate)
Em ambientes heterogêneos, com sistemas operacionais diferentes, ou até mesmo versões do Oracle Database diferentes, uma das poucas opções para uma migração com baixíssima indisponibilidade é via Oracle Golden Gate.
Esta é exatamente a situação que iremos simular neste Workshop (uma migração entre 11gR2 e 12cR1), de abordagem rápida e precisa, executando uma migração entre plataformas diferentes.
Você irá aprender de maneira totalmente prática o procedimento para preparar, configurar, executar e otimizar este tipo de operação.
Este tipo de situação é uma das mais avançadas em termos de Alta Disponibilidade, e todo DBA Sênior precisa domina-la.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
AmbienteOrigem - HOSTNAME nerv01 - Oracle Enterprise Linux 6.5 - Oracle Standard Edition One 11.2.0.4 - ORACLE_HOME: /u01/app/oracle/product/11.2.0.4/db_1 - Banco de Dados: ORCL - Banco de Dados em Filesystem
Destino - HOSTNAME nerv11 - Oracle Enterprise Linux 6.5 - Oracle Enterprise Edition 12.1.0.2 - ORACLE_HOME: /u01/app/oracle/product/12.1.0.2/db_1 - Banco de Dados: ORCL - Banco de Dados em Filesystem
2
Estratégia de Migração
3
Estratégia de Migração
- Manter a Aplicação funcionando; - Instalar Oracle Database Software no servidor nerv11; - Criar Instância e Banco de Dados no servidor nerv11; - Criar LISTENER no servidor nerv11;
- Instalar Oracle Golden Gate 12.1.2.1 (para Oracle Database 11g) no servidor nerv01; - Instalar Oracle Golden Gate 12.1.2.1 (para Oracle Database 12c) no servidor nerv11; - Iniciar Oracle Golden Gate no servidor nerv01; - Iniciar Oracle Golden Gate no servidor nerv11; - Criar TABLESPACEs no servidor nerv11; - Criar SCHEMAs no servidor nerv11; - Exportar DDL dos objetos (exceto INDEX e CONSTRAINT) do SCHEMA no servidor nerv01; - Importar DDL dos objetos (exceto INDEX e CONSTRAINT) do SCHEMA no servidor nerv11;
4
Estratégia de Migração
- Configurar EXTRACT de Extração INITIAL LOAD (EXT1) no servidor nerv01; - Configurar REPLICAT de SPECIAL RUN (REP1) no servidor nerv11; - Configurar EXTRACT de Extração de Redo Logs (EXT2) no servidor nerv01; - Configurar REPLICAT (REP2) no servidor nerv11; - Iniciar EXTRACT EXT2 no servidor nerv01; - Iniciar EXTRACT EXT1 no servidor nerv01; - Aguardar o EXTRACT EXT1 e o REPLICAT REP1 finalizarem; - Exportar DDL (apenas INDEX) dos objetos do SCHEMA no servidor nerv01; - Importar DDL (apenas INDEX) dos objetos do SCHEMA no servidor nerv11; - Iniciar o REP2; - Aguardar o REP2 estar com baixo DELAY; - Parar a Aplicação; - Aguardar o REP2 finalizar; - Parar EXTRACT EXT2; - Parar REPLICAT REP2; - Exportar DDL (só CONSTRAINTs) dos objetos do SCHEMA no servidor nerv01; - Importar DDL (só CONSTRAINTs) dos objetos do SCHEMA no servidor nerv11; - Direcionar a Aplicação para o servidor nerv11.
5
Lab 1 – Instalação Golden Gate
Hands On !
6 6
Lab 1.1: Instalação Golden Gate
Na máquina nerv01, inicie a instalação do Golden Gate.[oracle@nerv01 ~]$ unzip -q 121210_fbo_ggs_Linux_x64_shiphome.zip[oracle@nerv01 ~]$ cd fbo_ggs_Linux_x64_shiphome/Disk1[oracle@nerv01 Disk1]$ ./runInstaller
7
Lab 1.2: Instalação Golden Gate
8
Lab 1.3: Instalação Golden Gate
9
Lab 1.4: Instalação Golden Gate
10
Lab 1.5: Instalação Golden Gate
11
Lab 1.6: Instalação Golden Gate
Na máquina nerv12, inicie a instalação do Golden Gate.[oracle@nerv01 ~]$ ssh -CX oracle@nerv11[oracle@nerv11 ~]$ unzip -q 121210_fbo_ggs_Linux_x64_shiphome.zip[oracle@nerv11 ~]$ cd fbo_ggs_Linux_x64_shiphome/Disk1[oracle@nerv11 Disk1]$ ./runInstaller
12
Lab 1.7: Instalação Golden Gate
13
Lab 1.8: Instalação Golden Gate
14
Lab 1.9: Instalação Golden Gate
15
Lab 1.10: Instalação Golden Gate
16
Lab 1.11: Instalação Golden Gate
Na máquina nerv01, verifique se o MANAGER do Golden Gate está ativo.[oracle@nerv01 Disk1]$ cd $ORACLE_BASE/ogg[oracle@nerv01 ogg]$ rlwrap ./ggsciGGSCI (nerv01.localdomain) 1> info all
Na máquina nerv11, verifique se o MANAGER do Golden Gate está ativo.[oracle@nerv11 Disk1]$ cd $ORACLE_BASE/ogg[oracle@nerv11 ogg]$ rlwrap ./ggsciGGSCI (nerv11.localdomain) 1> info all
17
Lab 1.12: Instalação Golden Gate
Na máquina nerv01, habilite os pré-requisitos do Golden Gate.SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;SQL> ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE;SQL> ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP;
Na máquina nerv01, crie o SCHEMA para o Golden Gate.cd $ORACLE_BASE/oggSQL> CREATE TABLESPACE OGG DATAFILE '/u01/oradata/ORCL/ogg01.dbf' SIZE 1G AUTOEXTEND ON;SQL> CREATE USER OGG IDENTIFIED BY Nerv2014 DEFAULT TABLESPACE OGG TEMPORARY TABLESPACE TEMP;SQL> GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO OGG;SQL> GRANT EXECUTE ON UTL_FILE TO OGG;@marker_setup.sql OGG <enter>@ddl_setup.sql OGG <enter>@role_setup.sql OGG <enter>@ddl_enable.sql
18
Lab 1.13: Instalação Golden Gate
Na máquina nerv11, habilite os pré-requisitos do Golden Gate.SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;SQL> ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE;SQL> ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP;
Na máquina nerv11, crie o SCHEMA para o Golden Gate.cd $ORACLE_BASE/oggSQL> CREATE TABLESPACE OGG DATAFILE '/u01/oradata/ORCL/ogg01.dbf' SIZE 1G AUTOEXTEND ON;SQL> CREATE USER OGG IDENTIFIED BY Nerv2014 DEFAULT TABLESPACE OGG TEMPORARY TABLESPACE TEMP;SQL> GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO OGG;SQL> GRANT EXECUTE ON UTL_FILE TO OGG;@marker_setup.sql OGG <enter>@ddl_setup.sql OGG <enter>@role_setup.sql OGG <enter>@ddl_enable.sql
19
Lab 2 – Configuração Carga Inicial
Hands On !
20 20
Lab 2.1: Configuração Carga Inicial
Na máquina nerv01, verifique os comandos DDL para criação do SCHEMA.SQL> SET PAGESIZE 1000SQL> SET LINESIZE 300SQL> SET LONG 9000SQL> SELECT
DBMS_METADATA.GET_DDL('USER','SCOTT') FROM DUAL;SQL> SELECT
DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','SCOTT') FROM DUAL;
SQL> SELECTDBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','SCOTT') FROM DUAL;
Na máquina nerv11, execute os comandos DDL para criação do SCHEMA.
21
Lab 2.2: Configuração Carga Inicial
Na máquina nerv11, copie os objetos (exceto CONSTRAINT e INDEX) da máquina nerv01.
22
Lab 2.3: Configuração Carga Inicial
23
Lab 2.4: Configuração Carga Inicial
24
Lab 2.5: Configuração Carga Inicial
25
Lab 2.6: Configuração Carga Inicial
26
Lab 2.7: Configuração Carga Inicial
27
Lab 2.8: Configuração Carga Inicial
Na máquina nerv01, configure o processo EXTRACT de Carga Inicial.GGSCI (nerv01.localdomain) 1> ADD EXTRACT ext1, SOURCEISTABLE
Na máquina nerv01, configure o processo EXTRACT de Carga Incremental.GGSCI (nerv01.localdomain) 1> add extract ext2, tranlog, begin nowGGSCI (nerv01.localdomain) 1> add exttrail /u01/app/oracle/ogg/dirdat/lt, extract ext2
GGSCI (nerv01.localdomain) 1> info allOs dois processos EXTRACT são exibidos por este comando?
GGSCI (nerv01.localdomain) 1> info extract ext1GGSCI (nerv01.localdomain) 1> info extract ext2GGSCI (nerv01.localdomain) 1> info extract ext1, detailGGSCI (nerv01.localdomain) 1> info extract ext2, detailGGSCI (nerv01.localdomain) 1> stats extract ext1GGSCI (nerv01.localdomain) 1> stats extract ext2
30
Lab 3.2: Config. Carga Incremental
Na máquina nerv11, configure o processo REPLICAT de Carga Incremental.GGSCI (nerv11.localdomain) 1> edit params ./GLOBALGGSCHEMA OGG CHECKPOINTTABLE OGG.checkpoint
Na máquina nerv01, inicie o EXTRACT Incremental, e acompanhe o Log do Golden Gate.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv01.localdomain) 1> start extract ext2GGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info extract ext2GGSCI (nerv01.localdomain) 1> info extract ext2, detailGGSCI (nerv01.localdomain) 1> stats extract ext2
Na máquina nerv01, executa uma alteração de dados.$ sqlplus SCOTT/TIGERSQL> SET PAGES 1000SQL> SET LINES 200SQL> SELECT * FROM EMP;SQL> DELETE FROM EMP WHERE EMPNO IN (7369, 7499);SQL> COMMIT;SQL> SELECT * FROM EMP;GGSCI (nerv01.localdomain) 1> stats extract ext2
33
Lab 4.2: Executar Carga Inicial
Na máquina nerv01, inicie o EXTRACT Inicial, e acompanhe o Log do Golden Gate.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv01.localdomain) 1> start extract ext1GGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info extract ext1GGSCI (nerv01.localdomain) 1> info extract ext1, detailGGSCI (nerv01.localdomain) 1> stats extract ext1
Na máquina nerv11, acompanhe o progresso do REPLICAT Inicial.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info replicat rep1GGSCI (nerv01.localdomain) 1> info replicat rep1GGSCI (nerv01.localdomain) 1> stats replicat rep1
34
Lab 5 – Executar Carga Incremental
Hands On !
35 35
Lab 5.1: Executar Carga Incremental
Na máquina nerv11, após o término da da execução do REPLICAT Inicial, crie os INDEX.
36
Lab 5.2: Executar Carga Incremental
Na máquina nerv11, inicie o REPLICAT Incremental.GGSCI (nerv11.localdomain) 1> start replicat rep2$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv11.localdomain) 1> info allGGSCI (nerv11.localdomain) 1> info replicat rep2GGSCI (nerv11.localdomain) 1> info replicat rep2, detailGGSCI (nerv11.localdomain) 1> stats replicat rep2
Na máquina nerv01, acompanhe o progresso do EXTRACT Incremental.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info extract ext2GGSCI (nerv01.localdomain) 1> info extract ext2, detailGGSCI (nerv01.localdomain) 1> stats extract ext2
Compare os dados entre as máquinas nerv01 e nerv11.SQL> SELECT * FROM SCOTT.EMP;
37
Lab 6 – Finalizar Replicação
Hands On !
38 38
Lab 6.1: Finalizar Replicação
Na máquina nerv01, pare o EXTRACT Incremental.GGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> stop extract ext2GGSCI (nerv01.localdomain) 1> info all$ tail -f /u01/app/oracle/ogg/ggserr.log
Na máquina nerv11, pare o REPLICAT incremental.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv11.localdomain) 1> info allGGSCI (nerv11.localdomain) 1> info replicat rep2GGSCI (nerv11.localdomain) 1> info replicat rep2, detailGGSCI (nerv11.localdomain) 1> stats replicat rep2GGSCI (nerv11.localdomain) 1> send replicat rep2 getlagGGSCI (nerv11.localdomain) 1> stop replicat rep2GGSCI (nerv11.localdomain) 1> info all
Compare os dados entre as máquinas nerv01 e nerv11.SQL> SELECT * FROM SCOTT.EMP;
39
Lab 6.2: Finalizar Replicação
Na máquina nerv11, migre as CONSTRAINTs da máquina nerv01.
40
Lab 7 – Agora com um SCHEMA maior...
Hands On !
41 41
Lab 7.1: Configuração Carga Inicial
Na máquina nerv11, crie a tablespace SOE.SQL> CREATE TABLESPACE SOE DATAFILE '/u01/oradata/ORCL/soe01.dbf' SIZE 1G AUTOEXTEND ON;
Na máquina nerv01, verifique os comandos DDL para criação do SCHEMA.SQL> SET PAGESIZE 1000SQL> SET LINESIZE 300SQL> SET LONG 9000SQL> SELECT
DBMS_METADATA.GET_DDL('USER','SOE') FROM DUAL;SQL> SELECT
DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','SOE') FROM DUAL;
SQL> SELECTDBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','SOE') FROM DUAL;
Na máquina nerv11, execute os comandos DDL para criação do SCHEMA.
42
Lab 7.2: Configuração Carga Inicial
Na máquina nerv11, copie os objetos (exceto CONSTRAINTS e INDEX) da máquina nerv01.
43
Lab 7.3: Configuração Carga Inicial
44
Lab 7.4: Configuração Carga Inicial
45
Lab 7.5: Configuração Carga Inicial
46
Lab 7.6: Configuração Carga Inicial
47
Lab 7.7: Configuração Carga Inicial
48
Lab 7.8: Configuração Carga Inicial
Na máquina nerv01, configure o processo EXTRACT de Carga Inicial.GGSCI (nerv01.localdomain) 1> ADD EXTRACT ext3, SOURCEISTABLE
GGSCI (nerv01.localdomain) 1> edit params ext3EXTRACT ext3userid OGG@ORCL, password Nerv2014rmthost nerv11, mgrport 7809RMTTASK replicat, GROUP rep3table SOE.ORDERENTRY_METADATA;table SOE.PRODUCT_DESCRIPTIONS;table SOE.LOGON;table SOE.PRODUCT_INFORMATION;table SOE.INVENTORIES;table SOE.ORDERS;table SOE.ORDER_ITEMS;table SOE.WAREHOUSES;table SOE.CARD_DETAILS;table SOE.ADDRESSES;table SOE.CUSTOMERS;GGSCI> info all
49
Lab 7.9: Configuração Carga Inicial
Na máquina nerv11, configure o processo REPLICAT de Carga Inicial.GGSCI (nerv11.localdomain) 1> add replicat rep3, SPECIALRUN
Na máquina nerv01, configure o processo EXTRACT de Carga Incremental.GGSCI (nerv01.localdomain) 1> add extract ext4, tranlog, begin nowGGSCI (nerv01.localdomain) 1> add exttrail /u01/app/oracle/ogg/dirdat/in, extract ext4
GGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info extract ext3, detailGGSCI (nerv01.localdomain) 1> info extract ext4, detailGGSCI (nerv01.localdomain) 1> stats extract ext3GGSCI (nerv01.localdomain) 1> stats extract ext4
51
Lab 7.11: Config. Carga Incremental
Na máquina nerv11, configure o processo REPLICAT de Carga Incremental.GGSCI (nerv11.localdomain) 1> add replicat rep4, exttrail /u01/app/oracle/ogg/dirdat/in, checkpointtable OGG.checkpoint
GGSCI (nerv11.localdomain) 1> info allGGSCI (nerv11.localdomain) 1> info replicat rep3, detailGGSCI (nerv11.localdomain) 1> info replicat rep4, detailGGSCI (nerv11.localdomain) 1> stats replicat rep3GGSCI (nerv11.localdomain) 1> stats replicat rep4
52
Lab 7.12: Executar Carga Inicial
Na máquina nerv01, inicie o EXTRACT Incremental, e acompanhe o Log do Golden Gate.GGSCI (nerv01.localdomain) 1> start extract ext4$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info extract ext4GGSCI (nerv01.localdomain) 1> info extract ext4, detailGGSCI (nerv01.localdomain) 1> stats extract ext4
Na máquina nerv01, mantenha a aplicação funcionando.$ cd /home/oracle/swingbench/bin$ ./charbench -uc 2 -cs //nerv01/ORCL
53
Lab 7.13: Executar Carga Inicial
Na máquina nerv01, inicie o EXTRACT Inicial, e acompanhe o Log do Golden Gate.GGSCI (nerv01.localdomain) 1> start extract ext3$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info extract ext3GGSCI (nerv01.localdomain) 1> info extract ext3, detailGGSCI (nerv01.localdomain) 1> stats extract ext3
Na máquina nerv11, acompanhe o progresso do REPLICAT Inicial.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv11.localdomain) 1> info allGGSCI (nerv11.localdomain) 1> info replicat rep3GGSCI (nerv11.localdomain) 1> info replicat rep3GGSCI (nerv11.localdomain) 1> stats replicat rep3
Na máquina nerv01, verifique o tamanho das tabelas so SCHEMA.SQL> SELECT TO_CHAR(SUM(BYTES)) FROM DBA_SEGMENTS WHERE OWNER = 'SOE' AND SEGMENT_TYPE = 'TABLE';
Na máquina nerv11, verifique o tamanho das tabelas so SCHEMA.SQL> SELECT TO_CHAR(SUM(BYTES)) FROM DBA_SEGMENTS WHERE OWNER = 'SOE' AND SEGMENT_TYPE = 'TABLE';
54
Lab 7.14: Exec. Carga Incremental
Na máquina nerv11, após o término da da execução do REPLICAT Inicial, crie os INDEX.
55
Lab 7.15: Exec. Carga Incremental
Na máquina nerv11, inicie o REPLICAT Incremental.GGSCI (nerv11.localdomain) 1> start replicat rep4$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv11.localdomain) 1> info allGGSCI (nerv11.localdomain) 1> info replicat rep4GGSCI (nerv11.localdomain) 1> info replicat rep4, detailGGSCI (nerv11.localdomain) 1> stats replicat rep4
Na máquina nerv01, acompanhe o progresso do EXTRACT Incremental.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> info extract ext4GGSCI (nerv01.localdomain) 1> info extract ext4, detailGGSCI (nerv01.localdomain) 1> stats extract ext4
56
Lab 7.16: Finalizar Replicação
Na máquina nerv01, pare a aplicação.
Na máquina nerv01, pare o EXTRACT Incremental.GGSCI (nerv01.localdomain) 1> info allGGSCI (nerv01.localdomain) 1> stop extract ext4GGSCI (nerv01.localdomain) 1> info all$ tail -f /u01/app/oracle/ogg/ggserr.log
Na máquina nerv11, espere a replicação finalizar, e pare o REPLICAT Incremental.$ tail -f /u01/app/oracle/ogg/ggserr.logGGSCI (nerv11.localdomain) 1> info allGGSCI (nerv11.localdomain) 1> stats replicat rep4GGSCI (nerv11.localdomain) 1> send replicat rep4 getlagGGSCI (nerv11.localdomain) 1> stop replicat rep4GGSCI (nerv11.localdomain) 1> info all
57
Lab 7.17: Finalizar Replicação
Na máquina nerv11, migre as CONSTRAINTs da máquina nerv01.
58
Lab 7.18: Finalizar Replicação
Na máquina nerv11, recompile as PACKAGES da aplicação.SQL> GRANT EXECUTE ON DBMS_LOCK TO SOE;SQL> ALTER PACKAGE SOE.ORDERENTRY COMPILE;SQL> ALTER PACKAGE SOE.ORDERENTRY COMPILE BODY;
Na máquina nerv11, teste a execução da aplicação.$ cd /home/oracle/swingbench/bin$ ./charbench -uc 2 -cs //nerv11/ORCL