domingo, 6 de abril de 2014

Oracle GoldenGate - Parte 3



Jovens

Vamos dar sequência. Hoje, coisa fácil. Só a carga dos dados.

Se quiser lembrar onde estamos. Veja aqui [1] e aqui [2].

Vamos fazer a carga inicial do nosso TARGET. Como eu disse no primeiro artigo, pode ser feito via GG, via RMAN, via expdp/impdp.

Nesse caso, eu escolhi o expdp/impdp para mostrar a vocês. E foi o que eu usei com sucesso no projeto que trabalhei.


1) No SOURCE, criar os directories...
       SQL> CREATE OR REPLACE DIRECTORY EXPDP_DIR AS '/oracle/oradata/copiaQSP';
       SQL> GRANT READ, WRITE ON DIRECTORY EXPDP_DIR TO PUBLIC;

2) Vamos levantar o valor do SCN que utilizaremos.
       SQL> select current_scn from v$database;

       CURRENT_SCN
       -----------
        5600816832 

       Vamos usar esse como exemplo.
        
3) Exportando...
      
     vi expdp.sh
     expdp "isdba/*******@QSP" directory=EXPDP_DIR DUMPFILE=QSP_%U.dmp LOGFILE=qsp.log FULL=Y filesize=8192m  FLASHBACK_SCN=5600816832

     Execute:
     chmod +x expdp.sh
     nohup ./expdp.sh &
      
     tail -f nohup.out
      
    Não esqueçam que não é recomendado usar o SYS para fazer expdp/impdp Ok? Se quiser usar para o exemplo, ok. Mas não deve fazer isso.
      
4) Criando os directories no TARGET.
SQL> CREATE OR REPLACE DIRECTORY IMPDP_DIR AS '/oracle/oradata/copiaQSP';
       SQL> GRANT READ, WRITE ON DIRECTORY IMPDP_DIR TO PUBLIC;

       Depois de, claro, já ter feito a cópia para o outro servidor (TARGET) e já ter uma base criada lá, vamos importar a base.
      
       Ahhh, se as suas tablespaces são iguais, se os caminhos dos datafiles também, manda um full e já era. Se não, não esqueça de criar as tablespaces antes.
      
      
5) Importando...   
      
       vi impdp.sh
       impdp \"/ as sysdba\" directory=EXPDP_DIR dumpfile=QSP_%U.dmp logfile=impdp_QSP.log SCHEMAS='OPS$ORAQSP','OPS$QSPADM','OPS$SAPSERVICEQSP','SAPSR3';
      
       Execute:
       chmod +x impdp.sh
       nohup ./impdp.sh
      
       tail -f nohup.out
      
      
       Observação: Eu gosto de identificar os schemas que eu vou migrar. Mas ai é mania minha. Façam como quiser, desde que tenham feito o expdp com o flashback_scn. Se quiserem fazer um full, a vontade.
      
Ai sim hein jovem mancebo. Tudo indo bem...

Já conferiu? Objetos inválidos, quantidade de objetos, logs, etc? Não, hein?

A essa altura do campeonato 02? Sem conferência 02? E se estiver faltando algo 02?

Vai lá, confere.. Eu espero...

Waiting... Waiting... Waiting... zzz Zzz ZZZ... Opa, eu estou aqui.. Firme e forte...

Aeeee, agora sim.. Conferido...

Chegou a hora. Chegou o momento mais aguardado. Configurar o extract, data pump e replicat.
      
Vamos lá.. Está ancioso? Animado? Eu também...

Então.. Para.. Para.. Para.. Para...

Isso, vamos dar uma de João Kleber aqui... Só no próximo artigo.

Sim, temos que ter um pouco de suspense não é?

E não, não me xingue hein :D.

Abraço
Mario

quarta-feira, 2 de abril de 2014

Oracle GoldenGate - Parte 2



Olá Jovens

Agora que já conhecemos os processos do GG, bora lá colocar a mão na massa?

Se quiser relembrar, é só ir aqui: Oracle GoldenGate - Parte 1

Para começar, vamos identificar o cenário que eu teria que trabalhar: Migrar bases SAP que estavam em Oracle 10g/Solaris (10.2.0.3) para o novo datacenter com bases 11g Linux RedHat (11.2.0.3).

Detalhe: Sem downtime algum.

Então, vamos começar...

Obviamente precisamos baixar o GG. Faça isso no E-Delivery (https://edelivery.oracle.com/), na opção de "Fusion Middleware". Ou direto na aba de patches do MOS.

No MOS, pode ser que você encontre algumas versões que precisam de senha para download. Nesse caso, só com um SR para te fornecerem isso.

Selecione as versões aderentes a seu ambiente. Não vou colocar link's diretos pois cada caso é um caso.

Pode conferir informações de versão do GG aqui: Versões

Procure ali a sua versão e seja feliz.

No meu caso, vou utilizar:
       Para o Solaris: p17670495_1121016_SOLARIS64.zip
       Para o RH: p17828123_1121016_Linux-x86-64.zip

Agora sim, let's go boys and girls. Vamos instalar o GG.

Cuidado. Atenção. Importante... É preciso de muita, mas muita atenção mesmo na instalação pois é um procedimento muitooooooo complicado. Acompanhe abaixo...

Esse procedimento, deve ser realizado nos dois servidores - SOURCE e TARGET.

1) Crie uma pasta que será o seu GG_HOME. Aqui escolha o local que quiser.
       mkdir -p /oracle/oradata/QSP/gg11
      
       Manda no .bash_profile para facilitar:
       GG_HOME=/oracle/oradata/QSP/gg11; export GG_HOME
      
2) Copie o seu zip para o GG_HOME.
       cp -v p17670495_1121016_SOLARIS64.zip (ou p17828123_1121016_Linux-x86-64.zip) $GG_HOME/.
      
3) Descompacte o arquivo
       unzip p17670495_1121016_SOLARIS64.zip (ou p17828123_1121016_Linux-x86-64.zip)
      
4) Descompacte novamente, agora o arquivo ".tar" gerado no $GG_HOME.
       Solaris: tar -xvf fbo_ggs_Solaris_sparc_ora10g_64bit.tar
       RH: tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

5) Agora na base de dados, vamos criar um user para a replicação.

           As bases devem estar em modo archive.
           archive log list;

       Desabilite e faça um purge na recyclebin.
           alter system set recyclebin=off scope=both;
           show parameter bin
           purge recyclebin;
            
       Habilite o minimal supplemental logging.
             ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
             ALTER SYSTEM SWITCH LOGFILE;

             SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
             SUPPLEME
             --------
             YES

       Dá uma olhadinha na Undo também. Coloque a maior retenção que puder.
UNDO_RETENTION=86400

       Crie a tablespace e o usuário que será utilizado pelos processos GG.
             create tablespace gg_data
             datafile '/oracle/oradata/QSP/sapdata2/sr3_4/gg_data01.dbf'
size 1G
             autoextend on next 128M maxsize 10G;
      
      
             create user gguser
identified by COLOQUE_UMA_SENHA_DECENTE_POR_FAVOR
default tablespace gg_data;
            
             grant create session, connect, resource to gguser;
             grant select any dictionary, FLASHBACK ANY TABLE to gguser; 
             grant SELECT ANY TABLE, CREATE TABLE, CREATE VIEW to gguser;
             grant execute on utl_file to gguser;
             grant execute on dbms_flashback to gguser;
             grant create any table to gguser;
             grant insert any table to gguser;
             grant update any table to gguser;
             grant delete any table to gguser;
             grant drop any table to gguser;


6) Execute os scripts iniciais do GG.

       cd $GG_HOME - Temos que estar no diretório dos scripts do GG.
      
       sqlplus /nolog
       conn /as sysdba

       
       Observações: 

       Quando solicitado, você terá que entrar com o nome do user que acabou de criar acima. 
       Executar nessa ordem.
      
      
       SQL> @marker_setup.sql
             Enter Oracle GG schema name: gguser
       SQL> @ddl_setup.sql
             Enter Oracle GG schema name: gguser
       SQL> @role_setup.sql
             Enter GG schema name: gguser
      
             -- Ao final do script, executar:
             SQL> GRANT GGS_GGSUSER_ROLE TO gguser;
      
       SQL> @ddl_enable.sql
       SQL> @ddl_pin.sql gguser
      
       Importante: No último script, o erro abaixo pode aparecer. Para correção:
      
             Erro: PLS-00201: identifier 'DBMS_SHARED_POOL.KEEP' must be declared
             Correção: @?/rdbms/admin/dbmspool.sql
            
             Execute o @ddl_pin.sql novamente.


Esse conjunto de scripts cria todo o ambiente necessário para realizar as replicações. 

Complicadíssimo né. AHAHAHAHAHAHHAHA, é isso. O GG está instalado e pronto para ser configurado.

Ahhh que bom se tudo fosse assim, difícil não é?     
      
Agora, teste a instalação:

cd $GG_HOME

./ggsci
            
Oracle GG Command Interpreter for Oracle
Version 11.2.1.0.16 17781910 OGGCORE_11.2.1.0.0OGGBP_PLATFORMS_131205.0902_FBO
Solaris, sparc, 64bit (optimized), Oracle 10g on Dec  6 2013 16:31:39

Copyright (C) 1995, 2013, Oracle and/or its affiliates. All rights reserved.

GGSCI (mario) 1>
      
      
E se der erro? Calma jovem, se der erro nó resolvemos. Afinal somos destemidos DBA's não é mesmo?

Um erro que eu recebi em meus testes foi no momento de executar o GGSCI:
            
Erro: ./ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory
      
Para corrigir, pode criar os links simbólicos abaixo:
       ln -s $ORACLE_HOME/lib/libnnz10.so $GG_HOME/libnnz11.so
       ln -s $ORACLE_HOME/lib/libclntsh.so.10.1 $GG_HOME/libclntsh.so.11.1
            
Tenta de novo. Deu certo? Deu né, agora sim...

Estamos prontos para as configurações.

Mas isso jovem mancebo, vai ser em outro artigo...

Abraço
Mario