Replicação entre o IBM DB2 LUW e o Oracle Database 12c utilizando o Oracle GoldenGate - Parte 1

Por Yenugula Venkata Ravi Kumar Oracle ACE, Adrian Neagu (OCM) e Alex Zaballa Oracle ACE
Postado em Janeiro 2017

Revisado por Marcelo Pivovar - Solution Architect

Introdução:
Hoje em dia é comum existirem bancos de dados diferentes em uma organização, pois encontramos diversos sistemas de diferentes fornecedores. Dentre eles, podemos citar Oracle Database, IBM DB2, MS SQL, PostgreSQL, MySQL, entre outros.
Em alguns casos é necessário unificar os dados para uma melhor análise gerencial. Com isso, é necessário migrar ou replicar os dados entre os sistemas. Na maioria dos casos pode ser uma tarefa assustadora principalmente sem utilizar uma ferramenta apropriada e um plano adequado para o trabalho.
No artigo a seguir, apresentaremos uma carga de dados inicial seguida de uma replicação do IBM DB2 LUW para o Oracle Database 12c usando o Oracle GoldenGate.

Preparação do Ambiente:

Origem:
Sistema Operacional:    Oracle Virtual Box with SUSE Enterprise Linux 12.3
Banco de dados:           IBM DB2 10.5.7.1
Oracle GoldenGate:      Oracle GoldenGate v12.2.0.1.1
Nome do Servidor:       db2linux
Endereço IP:                 192.168.56.111

Destino:
Sistema Operacional:    Oracle Virtual Box with Oracle Enterprise Linux 6.5
Banco de dados:           Oracle Database 12c v12.1.0.2.0
Oracle GoldenGate:      Oracle GoldenGate v12.2.0.1.1
Nome do Servidor:       orcl
Endereço IP:                 192.168.56.101

Configurando a migração dos objetos:

Para executar a migração inicial dos objetos, utilizaremos o SQL Developer. O primeiro passo desse artigo será estabelecer uma conexão com o banco de dados de exemplo do IBM DB2. Você pode usar o SQL Developer para conectar e navegar em alguns bancos de dados. Para isso, é necessário instalar um driver JDBC como demonstrado abaixo:

Tools menu -> Preferences -> Database -> Third party JDBC Drivers

O driver JDBC para o IBM DB2 pode ser obtido na página de suporte da IBM ou pode ser copiado do diretório de instalação do DB2. No nosso exemplo os arquivos estão localizados em: /opt/ibm/db2/V10.5/java.

Copie os arquivos db2jcc4.jar e db2jcc_license_cu.jar para um diretório local e adicione ao SQL Developer através do botão “Add Entry”.

Após isso, será possível criar uma conexão para o IBM DB2.

Dados para criar a nova conexão:

Nome da Conexão: Sample
Servidor: db2linux
Usuário: db2inst1
Senha: test1234
Porta: 50001 
Banco de dados: SAMPLE

 

Teste a conexão com o banco de dados SAMPLE e verifique as tabelas. Todas estas tabelas serão migradas para o Oracle através do Oracle GoldenGate:

O SQL Developer irá utilizar um repositório para executar migrações. Para isso, é necessário criar um usuário chamado SQLMIGR, que será o proprietário deste repositório:

SQL> create user sqlmigr identified by test1234;
User created.
SQL> grant connect,resource,create view to sqlmigr;
Grant succeeded.
SQL> alter user sqlmirg quota unlimited on users ;
User altered.

 

Crie também um diretório para armazenar os arquivos de migração:

[root@orcl sqldeveloper]# mkdir /migrfiles
[root@orcl sqldeveloper]# chown -R oracle:oinstall /migrfiles/

 

Agora realize a instalação do repositório:

Tools menu ->  Migration -> Migrate.

Ao iniciar o assistente de migração, crie uma conexão chamada SQLMIGR utilizando o usuário SQLMIGR e a senha do test1234:

Assim que o repositório for criado, o assistente irá para a próxima etapa onde será definido um projeto de migração. Nomeie-o como db2tooracleproj e escolha o local onde serão armazenados os scripts de migração:

O próximo passo é escolher a conexão de origem, que no nosso caso será o SAMPLE. Deixe o modo padrão, que é o Online:

Aperte o Next e selecione o banco de dados SAMPLE:

Em seguida será exibida a grade que contém a lista de conversões de tipos de dados do DB2 para o Oracle. Nesta etapa podem ser feitas personalizações:

Na próxima página, serão mostrados os objetos de origem SQL PL que serão convertidos para PL/SQL (procedures, functions e triggers), constraints e views:

Em seguida podemos escolher o banco de dados de destino. Porém, vamos escolher o modo offline, onde todo o código de migração será gravado em arquivos:


Vá até o diretório /migrfiles/db2tooracleproj/generated/2016-05-15_11-58-06 e execute o script master.sql conectado com um usuário DBA no SQLPLUS.

Para a carga inicial, desabilite todas as constraints de foreign key.

Abra o SQLPLUS, conecte como db2inst1 e execute:

SQL> 
  declare
    v_str varchar2(300);
    cursor t_cur is select table_name,constraint_name from user_constraints where   constraint_type='R';
    begin
    for r in t_cur
    loop
    execute immediate 
    'ALTER TABLE ' || r.table_name ||' DISABLE CONSTRAINT ' || r.constraint_name ;
   end loop;
   end;
/
SQL> PL/SQL procedure successfully completed.

 

Carga inicial do DB2 para o Oracle

Configure o Oracle GoldenGate para o IBM DB2 LUW

Vamos utilizar o usuário ggs_admin para as operações no Oracle Goldengate.

Crie o usuário ggs_admin e atribua o privilégio database administrator authority (DBADM):

db2inst1@db2linux:~> db2 'connect to sample'
Database Connection Information
Database server        = DB2/LINUXX8664 10.5.7
SQL authorization ID   = DB2INST1
Local database alias   = SAMPLE
db2inst1@db2linux:~> db2 'grant dbadm on database to user ggs_admin'
DB20000I  The SQL command completed successfully.

 

Utilizaremos o diretório /u01/goldengate12c:

GGSCI (db2linux) 4> create subdirs
Creating subdirectories under current directory /u01/goldengate12c
Parameter files                                 /u01/goldengate12c/dirprm: created
Report files                                    /u01/goldengate12c/dirrpt: created
Checkpoint files                               /u01/goldengate12c/dirchk: created
Process status files                          /u01/goldengate12c/dirpcs: created
SQL script files                                /u01/goldengate12c/dirsql: created
Database definitions files                 /u01/goldengate12c/dirdef: created
Extract data files                             /u01/goldengate12c/dirdat: created
Temporary files                                /u01/goldengate12c/dirtmp: created
Credential store files                       /u01/goldengate12c/dircrd: created
Masterkey wallet files                      /u01/goldengate12c/dirwlt: created
Dump files                                      /u01/goldengate12c/dirdmp: created

 

Configure e inicialize o processo manager. Utilize a porta 7890 no lado do IBM DB2:

db2inst1@db2linux:/u01/goldengate12c> ./ggsci 
Oracle GoldenGate Command Interpreter for DB2
Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401
Linux, x64, 64bit (optimized), DB2 10.5 on Dec 11 2015 22:49:17
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
GGSCI (db2linux) 1> edit params mgr
PORT 7890
GGSCI (db2linux) 1> start mgr

 

Em seguida, crie um arquivo de parâmetro de extração chamado DB2ORALD e adicione os parâmetros a seguir:

GGSCI (db2linux) 1> edit params DB2ORALD
EXTRACT DB2ORALD
SOURCEDB SAMPLE
USERIDALIAS ggs_admin
rmthost orcl, mgrport 7809
rmttask replicat, group lddb2
table DB2INST1.PROJECT;
table DB2INST1.PROJACT ;
table DB2INST1.ACT ;
table DB2INST1.IN_TRAY;
table DB2INST1.ORG;
table DB2INST1.STAFF;
table DB2INST1.SALES;
table DB2INST1.STAFFG;
table DB2INST1.EMPMDC;
table DB2INST1.PRODUCT;
table DB2INST1.INVENTORY;
table DB2INST1.CUSTOMER;
table DB2INST1.PURCHASEORDER;
table DB2INST1.CATALOG;
table DB2INST1.CL_SCHED;
table DB2INST1.DEPARTMENT;
table DB2INST1.EMPPROJACT;
table DB2INST1.EMPLOYEE;
table DB2INST1.EMP_PHOTO;
table DB2INST1.EMP_RESUME;
table DB2INST1.SUPPLIERS;
table DB2INST1.PRODUCTSUPPLIER;

 

Defina o processo extract para a carga inicial:

GGSCI (db2linux) 8> add extract db2orald, sourceistable
EXTRACT added.

Configurando o GoldenGate no Oracle Database

Configure o manager, atribua a porta 7809 e permita o acesso do db2linux:

GGSCI (orcl) 1> edit params mgr
PORT 7809
ACCESSRULE, PROG *, IPADDR 192.168.56.111, ALLOW 
GGSCI (orcl) 1> start mgr

 

Configure o processo replicat, nomeie para LDDB2 e defina os seguintes parâmetros:

GGSCI (orcl) 1> edit params LDDB2 
replicat LDDB2
SETENV (ORACLE_SID=ORCL)
userid ggs_admin, password ggs_admin
Handlecollisions
Assumetargetdefs
MAP DB2INST1.*,   TARGET  DB2INST1.*        

 

Defina o processo replicat como specialrun:

GGSCI (orcl) 71> add replicat LDDB2, specialrun
REPLICAT added.

 

A carga inicial

No lado do db2, inicie o processo extract:  

GGSCI (db2linux) 13> start db2orald 
Sending START request to MANAGER ...
EXTRACT DB2ORALD starting

Ao executar um tail no arquivo ggserr.log você verá algo como a seguir:

2016-05-15 11:25:05  INFO  OGG-00993  Oracle GoldenGate Capture for DB2, db2orald.prm:  EXTRACT DB2ORALD started.
2016-05-15 11:25:11  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.PROJECT.
2016-05-15 11:25:16  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.PROJACT.
2016-05-15 11:25:18  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.ACT.
2016-05-15 11:25:20  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.IN_TRAY.
2016-05-15 11:25:20  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.ORG.
2016-05-15 11:25:20  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.STAFF.
2016-05-15 11:25:21  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.SALES.
2016-05-15 11:25:24  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.STAFFG.
2016-05-15 11:25:25  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.EMPMDC.
2016-05-15 11:25:28  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.PRODUCT.
2016-05-15 11:25:32  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.INVENTORY.
2016-05-15 11:25:38  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.CUSTOMER.
2016-05-15 11:25:44  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.PURCHASEORDER.
2016-05-15 11:25:50  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.CATALOG.
2016-05-15 11:25:51  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.CL_SCHED.
2016-05-15 11:25:59  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.DEPARTMENT.
2016-05-15 11:26:08  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.EMPPROJACT.
2016-05-15 11:26:13  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.EMPLOYEE.
2016-05-15 11:26:19  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.EMP_PHOTO.
2016-05-15 11:26:27  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.EMP_RESUME.
2016-05-15 11:26:39  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.SUPPLIERS.
2016-05-15 11:26:44  INFO  OGG-02911  Oracle GoldenGate Capture for DB2, db2orald.prm:  Processing table DB2INST1.PRODUCTSUPPLIER.
2016-05-15 11:26:50  INFO  OGG-00991  Oracle GoldenGate Capture for DB2, db2orald.prm:  EXTRACT DB2ORALD stopped normally.

 

Agora podemos habilitar todas as constraints de foreign key.

Abra o SQLPLUS, conecte como db2inst1 e execute:

SQL> 
  declare
    v_str varchar2(300);
    cursor t_cur is select table_name,constraint_name from user_constraints where   constraint_type='R';
    begin
    for r in t_cur
    loop
    execute immediate 
    'ALTER TABLE ' || r.table_name ||' ENABLE CONSTRAINT ' || r.constraint_name ;
   end loop;
   end;
/
SQL> PL/SQL procedure successfully completed.

 

Sumário:

Neste artigo foi demonstrada uma carga inicial do IBM DB2 LUW para Oracle Database 12c usando o Oracle GoldenGate 12c.
Resumidamente, faz-se necessário realizar os seguintes passos:

  • Criar uma conexão com o banco de dados DB2.
  • Criar um repositório de migração ou usar um existente.
  • Criar um projeto de migração e gerar os scripts DDL.
  • Executar os scripts DDL no banco de dados Oracle.
  • Instalar o Oracle GoldenGate na origem e no destino.
  • Criar os usuários de banco de dados para o Oracle GoldenGate.
  • Configurar os processos manager, extract e replicat na origem e no destino.
  • Iniciar a carga inicial.
  • Solucionar os problemas.

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.

Adrian Neagu é um DBA com mais de 15 anos de experiência em diversas tecnologias de banco de dados. Ele é Oracle Certified Master 10g e 11g, Oracle Certified Professional 9i, 10g, e 11g, Cloudera Certified Administrator for Apache Hadoop, IBM DB2 Certified Administrator version 8.1.2 e 9, IBM DB2 9 Advanced Certified Administrator 9, e Sun Certified System Administrator Solaris 10.

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 12c/11G/Cloud e conta com mais de 200 outras certificações em produtos da Oracle. Alex também é membro do Groupo de Usuários Oracle do Brasil (GUOB), 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.