DB2 9.7: IBM Data Movement Tool

Habilitar aplicativos Oracle para DB2 é fácil

Este artigo apresenta uma ferramenta avançada e muito simples que habilita a execução de aplicativos do Oracle no IBM® DB2® Versão 9.7 para Linux®, UNIX® e Windows®. A ferramenta também pode ser usada em uma movimentação de dados que tenha como origem diversos outros sistemas de gerenciamento de banco de dados e como destino o DB2 para Linux, UNIX e Windows e o DB2 para z/OS®.

Vikram S. Khatri, Certified Consulting I/T Specialist, EMC

Vikram S Khatri trabalha na IBM na Divisão de Vendas e Distribuição e é um membro da equipe de Migração de DB2. Vikram tem 23 anos de experiência em TI e é especializado na habilitação de aplicativos não DB2 para DB2. Vikram suporta a organização de vendas técnicas de DB2 ajudando em projetos complexos de migração de bancos de dados e testes de avaliação de desempenho de bancos de dados.


nível de autor Contribuidor do
        developerWorks

26/Jun/2009 (Primeira publicação 19/Jun/2009)

Introdução

A partir do DB2 V9.7 para Linux, UNIX e Windows, o Migration Toolkit (MTK) não é mais necessário para a utilização de aplicativos do Oracle nos produtos DB2. Esta ferramenta substitui a funcionalidade do MTK por um fluxo de trabalho imensamente simplificado.

Para todos os outros cenários, por exemplo, a movimentação de dados com origem em um banco de dados e destino no DB2 para z/OS, esta ferramenta oferece suporte para o MTK, especialmente na área de movimentação de dados de alta velocidade. Com esta ferramenta, incríveis 4TB de dados foram movidos em apenas três dias.

A GUI apresenta uma interface de fácil utilização para o iniciante ao passo que a API de linha de comandos é sempre a opção do usuário avançado.

Preparação

Download

Primeiro, faça download da ferramenta da seção Download para o servidor DB2 de destino. São necessárias etapas adicionais para mover dados que se destinem ao DB2 para z/OS.

Instalação

Uma vez transferido por download o arquivo IBMDataMovementTool.zip, extraia os arquivos para um diretório denominado IBMDataMovementTool no servidor DB2 de destino. É extremamente recomendada uma instalação do lado do servidor (no DB2) para obter o melhor desempenho na movimentação de dados.

Pré-requisitos

  • O DB2 V9.7 deverá estar instalado no servidor de destino caso você habilite a execução de um aplicativo do Oracle no DB2 para Linux, UNIX e Windows.

O servidor de destino deve conter uma instalação do

  • Java™ versão 1.5 ou posterior. Para verificar a versão atual do Java, execute o comando java -version. Por padrão, o Java é instalado como parte do DB2 para Linux, UNIX e Windows em <install_dir>\SQLLIB\java\jdk (Windows) ou /opt/ibm/db2/V9.7/java/jdk (Linux).
  • O local dos drivers JDBC do banco de dados de origem e do DB2.
    Banco de dadosDrivers JDBC
    Oracleojdbc14.jar, xdb.jar, xmlparserv2.jar ou classes12.jar ou classes111.jar para Oracle 7 ou 8i.
    SQL Serversqljdbc.jar
    Sybasejconn3.jar
    MySQLmysql-connector-java-5.0.8-bin.jar
    PostgreSQLpostgresql-8.1-405.jdbc3.jar
    Ingresiijdbc.jar
    DB2 para Linux, UNIX e Windowsdb2jcc.jar, db2jcc_license_cu.jar
    DB2 para zdb2jcc.jar, db2jcc_license_cisuz.jar
    MS AccessOptional Access_JDBC30.jar

Configuração do ambiente

  • UNIX: Efetue login no servidor como proprietário da instância DB2.
  • Windows: Ative uma janela de comandos do DB2.
  • Mude para o diretório IBMDataMovementTool. A ferramenta é um arquivo JAR com dois scripts de drivers para execução da ferramenta.
    IBMDataMovementTool.cmd - Script de comandos para execução da ferramenta no Windows.
    IBMDataMovementTool.cmd - Script de comandos para execução da ferramenta no UNIX.
    IBMDataMovementTool.jar - Arquivo JAR da ferramenta.

Criar o banco de dados DB2 de destino

Como é obrigatório ter uma conexão de banco de dados com o destino para executar a ferramenta, crie o banco de dados DB2 primeiro. No DB2 V9.7, é recomendado usar o armazenamento automático padrão e optar pelo tamanho de página de 32KB. Ao habilitar a execução de aplicativos no DB2 V9.7, a instância e o banco de dados devem estar operando no modo compatibilidade. Também é recomendado ajustar o comportamento do arredondamento de modo a corresponder ao do Oracle. É possível implementar objetos fora da ordem de dependência configurando as semânticas de revalidação como deferred_force.

Nos Sistemas UNIX

$ db2set DB2_COMPATIBILITY_VECTOR=ORA
$ db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
$ db2stop force
$ db2start
$ db2 "create db testdb automatic storage yes on /db2data1,
/db2data2,/db2data3 DBPATH ON /db2system PAGESIZE 32 K"
$ db2 update db cfg for testdb using auto_reval deferred_enforce
$ db2 update db cfg for testdb using decflt_rounding round_half_up

Nos Sistemas Windows

C:\> db2set DB2_COMPATIBILITY_VECTOR=ORA
C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
C:\> db2stop force
C:\> db2start
C:\> db2 "create db testdb automatic storage yes on C:,D: DBPATH ON E: PAGESIZE 32 K"
C:\> db2 update db cfg for testdb using auto_reval deferred_enforce
C:\> db2 update db cfg for testdb using decflt_rounding round_half_up

Extraindo objetos e dados

Antes de executar a ferramenta, tenha em mãos as seguintes informações dos servidores de origem e do DB2:

  • Endereço IP ou Nome do Host dos servidores de origem e DB2
  • Os números das portas a serem conectadas
  • Nomes de bancos de dados, SID, nome de subsistema etc. (como necessário)
  • Um ID de Usuário com privilégios DBA no banco de dados de origem
  • A senha desse usuário
  • O local do banco de dados de origem e dos drivers DB2 JDBC
  • Espaço suficiente ou informações que apontem para o local de armazenamento dos dados

No Windows, execute IBMDataMovementTool.cmd; no UNIX, execute ./IBMDataMovementTool.sh. A ferramenta iniciará uma GUI se o servidor tiver recursos para exibição de gráficos. Caso contrário, ela alternará para o modo linha de comando interativo a fim de obter a entrada.

No Windows:
IBMDataMovementTool.cmd

No UNIX:
./IBMDataMovementTool.sh

O que é o DB2_COMPATIBILITY_VECTOR?

O DB2_COMPATIBILITY_VECTOR é usado para colocar a instância e o banco de dados DB2 V9.7 em um modo compatível com Oracle. Para obter mais detalhes, consulte o Centro de Informações do DB2 V9.7.

Agora você verá uma janela da GUI. Algumas mensagens também aparecerão na janela shell. Percorra as mensagens para garantir que não haja nenhum erro no log antes de iniciar o uso da GUI.

Caso você não tenha definido DB2_COMPATIBILITY_VECTOR, a ferramenta informará um aviso. Siga as seguintes etapas para definir o vetor de compatibilidade (caso não tenha feito ainda).

[2009-05-15 12.48.59.218] INPUT Directory = .
[2009-05-15 12.48.59.218] Configuration file loaded: 'jdbcdriver.properties'
[2009-05-15 12.48.59.218] Configuration file loaded: 'IBMExtract.properties'
[2009-05-15 12.48.59.218] appJar  : 'C:\Vikram\Prospects\DB2Cobra\IBMDataMovementTool.jar'
[2009-05-15 12.49.01.000] * WARNING *. I did not detect DB2_COMPATIBILITY_VECTOR set for 
                          compatibility mode.
[2009-05-15 12.49.01.000] To set compatibility mode, discontinue this program and 
                          run the following commands
[2009-05-15 12.49.01.000] db2set DB2_COMPATIBILITY_VECTOR=ORA
[2009-05-15 12.49.01.000] db2stop force
[2009-05-15 12.49.01.000] db2start

Usando a Interface Gráfica com o Usuário

A tela da GUI, ilustrada na Figura 1, possui campos para especificação das informações da conexão dos bancos de dados de origem e DB2. Esta é a sequência de eventos nessa tela:

  1. Especifique as informações da conexão de origem e do DB2.
  2. Clique em Conectar ao Oracle para testar a conexão.
  3. Clique em Conectar ao DB2 para testar a conexão.
  4. Especifique o diretório de trabalho para o qual os DDLs e os dados serão extraídos.
  5. Escolha DDL e/ou DATA. Se você selecionar apenas DDLs, um script genddl adicional será gerado.
  6. Clique no botão Extrair Dados. Na janela do console, é possível monitorar o progresso.
  7. Depois da conclusão bem-sucedida da extração de dados, percorra os arquivos de saída resultantes e verifique os status da movimentação de dados, avisos, erros e outros problemas potenciais.
  8. Opcionalmente, é possível clicar no botão Visualizar Script/Saída para consultar os scripts, DDLs, dados gerados ou arquivo de log de saída.
  9. Clique no botão Implementar Dados para criar tabelas e índices no DB2, e carregar os dados extraídos do banco de dados de origem.
  10. Como alternativa para execução dos scripts gerados, em vez de recorrer à linha de comandos, use Executar Script DB2. A movimentação de dados é um exercício interativo. Se necessitar eliminar todas as tabelas antes do início da renovação, selecione e execute o script drop table. Também é possível usar esse botão para escolher a ordem de execução dos scripts.
Figura 1. Parâmetros de entrada do banco de dados de origem e DB2
Extract and Deploy Data

Depois de clicar no botão Extrair DDLs/Dados, você verá as mensagens da ferramenta na guia Visualizar Arquivos, como ilustrado na Figura 2.

Figura 2. Extrair DDLs e Dados
Extract DDL / Data

Depois de concluir a extração de DDL e DATA, haverá vários arquivos novos criados no diretório de trabalho. Esses arquivos podem ser usados para a API de linha de comandos.

Arquivos de configuração

O scripts de comandos a seguir serão novamente gerados cada vez que você executar a ferramenta no modo GUI. No entanto, é possível usar esses scripts para executar todos os passos de movimentação de dados sem a GUI. Isso é útil quando você quer incorporar a ferramenta em um processo em lote a fim de obter uma movimentação de dados automatizada.

Nome do arquivoDescrição
IBMExtract.propertiesEste arquivo contém todos os parâmetros de entrada que você especificou via GUI ou linha de comandos. É possível editá-lo manualmente para modificar ou corrigir os parâmetros. Observe que o arquivo será sobrescrito a cada execução da GUI.
geninputEste é o primeiro passo da movimentação de dados; você criará um arquivo de entrada com os nomes das tabelas a serem movidas. Edite esse arquivo manualmente para excluir as tabelas que não devem ser movidas.
genddlEste script é opcional e será gerado apenas quando você separar a geração de DDL da geração de DATA. Este é o segundo passo na movimentação de dados e visa gerar todos os DDLs, do banco de dados de origem para o DB2.
unload Este é o último passo da movimentação de dados. Este script descarrega para arquivos simples os dados do servidor de banco de dados de origem. Scripts DB2 LOAD serão gerados depois da execução desse script.
É digno de nota: Caso você não tenha optado por separar DDL de DATA, o conteúdo do genddl estará incluído no script unload.
rowcountEste arquivo será usado depois da movimentação dos dados para fins de verificação de integridade pela contagem das linhas das tabelas nos servidores de banco de dados de origem e destino.
Figura 3. Arquivos criados depois da extração dos dados
Step-2. Files created

Usando o modo linha de comando

É possível executar a ferramenta no modo linha de comando, especialmente quando o recurso GUI não está disponível em um servidor ou a conexão foi estabelecida por meio de uma sessão telnet / ssh. A ferramenta alternará os modos automaticamente, caso não seja possível iniciar a GUI. Para forçar a execução da ferramenta no modo linha de comando interativo, especifique a opção -console para o comando IBMDataMovementTool.

No Windows: IBMDataMovementTool -console No UNIX: ./IBMDataMovementTool.sh	-console


Serão apresentadas opções interativas para que você especifique os parâmetros da conexão dos bancos de dados de origem e DB2, em um processo passo a passo. Uma amostra da saída na janela do console é ilustrada a seguir:

[2009-05-16 23.38.54.703] INPUT Directory = .
[2009-05-16 23.38.54.703] Configuration file loaded: 'jdbcdriver.properties'
[2009-05-16 23.38.54.703] Configuration file loaded: 'IBMExtract.properties'
[2009-05-16 23.38.54.703] appJar  : 'C:\Vikram\Prospects\DB2Cobra\IBMDataMovementTool.jar'
Extract DDL (Yes)        : 1
Extract DDL (No)         : 2
Enter a number (Default=1) : 1
Extract Data (Yes)        : 1
Extract Data (No)         : 2
Enter a number (Default=1) : 2
******* Source database information: *****
Oracle                  : 1
MS SQL Server           : 2
Sybase                  : 3
MS Access Database      : 4
MySQL                   : 5
PostgreSQL              : 6
DB2 z/OS                : 7
DB2 LUW                 : 8
Enter a number (Default 1) : 1

Implementando objetos e carregando dados

Criar objetos de destino no banco de dados

Depois da extração de DDL e DATA, haverá três modos diferentes para implementação dos objetos extraídos no DB2.

  • Clique no botão Implementar DDL/DATA, na tela da GUI
  • Vá para a guia Implementação Interativa e use o processo passo a passo para implementar os objetos
  • Implemente DDL/DATA usando o script unload da linha de comando

Que opções de implementação escolher dependerá dos requisitos da movimentação de dados e objetos. Se estiver migrando apenas objetos DDL não-PL/SQL e DATA, bastará usar o script unload ou clicar no botão Implementar DDL/DATA na GUI.

Provavelmente, a opção de implementação interativa é a melhor escolha para implementar objetos PL/SQL, por exemplo, acionadores, funções, procedimentos e pacotes PL/SQL.

A tela da GUI, ilustrada na Figura 4, destina-se à implementação interativa de DDLs e outros objetos do banco de dados. Esta é a sequência de eventos nessa tela:

  1. Assegure que você está conectado ao DB2 usando a guia Extrair/Implementar.
  2. Clique na guia Implementação Interativa.
  3. Use o botão Abrir Diretório para selecionar o diretório de trabalho que contém os objetos extraídos anteriormente. Tais objetos são lidos e listados em uma visualização em árvore.
  4. É possível implementar todos eles usando o botão Implementar Todos os Objetos na barra de ferramentas. A implementação da maioria dos objetos será bem-sucedida enquanto outras podem falhar.
  5. Ao clicar em um objeto cuja implementação na visualização em árvore tenha falhado, será possível usar a janela do editor para visualizar a origem do objeto. O motivo da falha estará listado abaixo, no log da implementação.
  6. O modo compatibilidade do Oracle normalmente permite a implementação de objetos no estado em que se encontram. No entanto, é possível que ainda haja recursos não suportados que impeçam a implementação bem-sucedida de alguns objetos que acabaram de sair da caixa. Com o editor, ajuste o código de origem de tais objetos de modo a contornar quaisquer problemas. Quando você implementar o objeto alterado, a nova origem será salva com um backup da origem antiga.
  7. É possível selecionar um ou mais objetos usando a tecla CTRL e clicar no botão Implementar Objetos Selecionados, na barra de tarefas, depois de que eles forem editados. Muitas vezes, as falhas de implementação ocorrem em cascata. Isso significa que, se for implementado um objeto com êxito, os outros objetos que dele dependem também serão implementados.
  8. Repita os passos 5 a 7 até implementar todos os objetos com êxito.
Figura 4. Implementação interativa dos objetos
Step-3. Interactive Deploy

Comparar contagens de linha

  • Vá para o diretório-raiz da movimentação de dados e execute o script rowcount.
  • Consulte o relatório gerado no arquivo "<nome do banco de dados de origem>.tables.rowcount". Ele conterá as contagens de linhas dos bancos de dados de origem e destino.
oracle                      :       db2
"TESTCASE"."CALL_STACKS"    : 123   "TESTCASE"."CALL_STACKS"      : 123
"TESTCASE"."CLASSES"        : 401   "TESTCASE"."CLASSES"          : 401
"TESTCASE"."DESTINATION"    : 513   "TESTCASE"."DESTINATION"      : 513

Passos adicionais para DB2 no z/OS

Processo UNLOAD no z/OS

  • Esta ferramenta requer o USS para ser executada; no entanto, não é possível que o DB2 LOAD no z/OS use arquivos HFS para carregar os dados. Esse é o motivo pelo qual é necessário usar o conjunto de ferramentas JZOS para criar conjuntos de dados PS no z/OS a partir dos Serviços do Sistema UNIX. No entanto, o DB2 LOAD pode usar os arquivos USS (ou HFS) para executar LOAD CLOBS/BLOBS no DB2. Isso se dá porque criamos conjuntos de dados PS no z/Os, para mover os dados do banco de dados de origem para o z/OS, e usamos os arquivos HFS dos Serviços do Sistema UNIX para manter todos os BLOBS/CLOBS.
  • A instrução LOAD não pode ser executada no USS. Use os procedimentos armazenados SYSPROC.DSNUTILS para executar as operações LOAD, CHECK DATA e RUN STATS.
  • Criar conjuntos de dados PS é um desafio porque é necessário alocá-lo para cada tabela. Não é possível alocar um tamanho fixo porque o tamanho da tabela é desconhecido. Isso pode desperdiçar grandes quantidades de espaço no z/OS. Para impedir um problema de espaço, use um algoritmo para alocar o tamanho.

É possível usar esta ferramenta do z/OS para fazer a movimentação de dados do banco de dados de origem ao DB2 para z/OS. No entanto, os seguintes passos adicionais são necessários.

  1. Use este link da IBM para download e instalação do JZOS.
  2. Esse arquivo zip contém um arquivo denominado jzos.pax. Transfira esse arquivo por FTP usando os Serviços do Sistema Unix no modo binário para o diretório de instalação do JZOS.
  3. Mude para o diretório no qual você salvou o arquivo .pax.
  4. Execute o comando: pax -rvf. Isso criará um subconjunto denominado jzos no diretório de trabalho atual. Esse subdiretório será referido como <JZOS_HOME>
  5. No diretório inicial do usuário, crie um arquivo denominado .profile, com base no modelo fornecido, e faça as alterações de acordo com a sua instalação do DB2 no z/OS.
    export JZOS_HOME=$HOME/jzos
    export JAVA_PATH=/usr/lpp/java/J1.5
    export PATH=$JAVA_HOME/bin:$PATH		        
    export CLPHOME=/usr/lpp/db2/db2910/db2910_base/lib/IBM                  
    export CLASSPATH=$CLASSPATH:/usr/lpp/db2/db2910/db2910_base/lib/clp.jar 
    export CLPPROPERTIESFILE=$HOME/clp.properties                           
    export LIBPATH=$LIBPATH:<JZOS_HOME<                               
    alias db2="java com.ibm.db2.clp.db2"
  6. Talvez seja necessário modificar CLPHOME e CLASSPATH, dependendo do seu ambiente. Substitua <JZOS_HOME> pelo diretório apropriado.
  7. No diretório inicial do usuário, crie um arquivo denominado clp.properties com base no modelo fornecido abaixo:
    #Specify the value as ON/OFF or leave them blank              
    DisplaySQLCA=ON                                               
    AutoCommit=ON                                                 
    InputFilename=                                                
    OutputFilename=                                               
    DisplayOutput=                                                
    StopOnError=                                                  
    TerminationChar=                                              
    Echo=                                                         
    StripHeaders=                                                 
    MaxLinesFromSelect=                                           
    MaxColumnWidth=20                                             
    IsolationLevel=                                               
    <SUBSYSTEM_NAME>=<IP address>:<port number>/<location name>,USER,PASSWD
    Substitua os itens adequados na última linha.
  8. Execute o comando chmod 777 <JZOS_HOME>/*.so
  9. Execute o comando IBMDataMovementTool.sh -console e especifique os valores dos parâmetros pela resposta interativa do usuário.
  10. Os scripts IBMExtract.properties, geninput e unload são criados.
  11. O parâmetro zdb2tableseries em IBMExtract.properties é para especificação do nome da série dos conjuntos de dados PS. Por exemplo, se o seu ID do TSO for DNET770 e o parâmetro estiver definido como R, o nome do conjunto de dados PS criado para a primeira tabela será DNET777.TBLDATA.R0000001
  12. O parâmetro znocopypend é usado para incluir o parâmetro NOCOPYPEND na instrução LOAD. Com esse parâmetro, o z/OS DB2 DBA poderá executar o backup já que a tabela não será colocada no modo pendende COPY.
  13. O parâmetro zoveralloc especifica o tamanho extra máximo desejado para as solicitações de alocação de arquivos. Um valor igual a 1 significa nenhum tamanho extra. Em um ambiente com capacidade de armazenamento livre suficiente, isso pode funcionar. Em um ambiente realístico, 15/11 (1.3636) é uma boa estimativa. É recomendado iniciar em 1.3636 (15/11) e reduzir o valor gradualmente até obter erros de gravação de arquivo, aumentando o valor um pouco, logo em seguida. Se você conhece o valor do parâmetro REDUCE SPACE UP TO do SMS, deve ser capaz de calcular o valor perfeito para overAlloc, calculando 1 / (1 - (X/100)), onde X é o valor REDUCE SPACE UP TO fornecido (um inteiro entre 0 - 100). Observe que REDUCE SPACE UP TO representa uma porcentagem.
  14. O parâmetro zsecondary é usado para alocar extensões secundárias fixas. Inicie a partir de 0 e aumente o valor lentamente até ocorrerem erros de arquivo, reduzindo o valor um pouco, logo em seguida
  15. Execute o script geninput para criar um arquivo de entrada para o processo unload.
  16. Execute o script unload para gerar DDL e DATA.
  17. Execute o script gerado para criar o DDL e carregar dados no z/OS DB2.
  18. O DSNUTILS falhará se você não excluir esses conjuntos de dados. O programa java a seguir pode excluir esses conjuntos de dados intermediários.
    java -cp /u/dnet770/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar \
    -Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Cleanup
  19. Depois de concluir o carregamento dos dados para as tabelas do DB2 no z/OS, localize os conjuntos de dados que deseja excluir. Use o programa java a seguir para excluir esses conjuntos de dados com parte da limpeza.

    Crie um script jd como mostrado a seguir:

    JZOS_HOME=$HOME/jzos
    JAVA_HOME=/usr/lpp/java/J1.5
    CLASSPATH=$HOME/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar
    LIBPATH=$LIBPATH:$JZOS_HOME
    
    $JAVA_HOME/bin/java -cp $CLASSPATH \
    -Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Jd $1

    Altere a permissão do arquivo para 755 e execute-o; você obterá uma saída semelhante a esta:

    DNET770:/u/dnet770/migr: >./jd
    USAGE: ibm.Jd <filter_key>
    USAGE: ibm.Jd "DNET770.TBLDATA.**"
    USAGE: ibm.Jd "DNET770.TBLDATA.**.CERR"
    USAGE: ibm.Jd "DNET770.TBLDATA.**.LERR"
    USAGE: ibm.Jd "DNET770.TBLDATA.**.DISC"

    Assim, para excluir todos os conjuntos de dados em "DNET770.TBLDATA", use o seguinte comando.

    DNET770:/u/dnet770/migr: >./jd "DNET770.TBLDATA.**"

Planejar movimentação de dados de grande porte

A ênfase desta ferramenta é a movimentação de dados de grande escala. Com planejamento e procedimentos bons, esta ferramenta foi usada para mover 4TB de dados do Oracle em apenas três dias. Seguem algumas dicas e técnicas úteis para executar movimentação de dados de grande escala em uma janela de tempo restrita.

Planejamento dos requisitos e da capacidade de hardware

Está fora do escopo deste artigo abordar o planejamento da capacidade do banco de dados e dos requisitos de hardware, mas é importante ter em mente as seguintes considerações ao fazer a estimativa de tempo para conclusão da movimentação de dados de grande escala.

  • É necessário ter uma boa conexão de rede entre o servidor de origem e o servidor do DB2, preferivelmente 1GBPS ou mais. No intervalo de tempo até a conclusão da movimentação de dados, você estará limitado pela largura de banda da rede.
  • O número de CPUs no servidor de origem permitirá que você descarregue várias tabelas em paralelo. Para banco de dados maiores que 1TB, é necessário ter, pelo menos, 4 CPUs no servidor de origem.
  • O número de CPUs no servidor DB2 determinará a velocidade do processo LOAD. Como regra geral, você necessitará de 1/4 a 1/3 do tempo para o carregamento dos dados e o restante para o processo de descarga.
  • Planeje com antecedência o layout do banco de dados DB2. Consulte os documentos de boas práticas da IBM para DB2

Dicas e técnicas

  • Conheça a ferramenta no modo linha de comando. Use a GUI para gerar scripts de movimentação de dados (geninput e unload) e pratique o descarregamento de dados executando o script unload na linha de comandos.
  • Extraia apenas DDL da origem definindo GENDDL=true e UNLOAD=false no script unload. Use o DDL gerado para planejar o espaço da tabela e o mapeamento de tabelas. Use um diretório de saída separado para o armazenamento de DDLs e dados gerados, especificando o diretório de destino por meio do parâmetro -DOUTPUT_DIR no script unload. A geração dos DDLs deve ocorrer antes da movimentação final dos dados.
  • Use o script geninput para gerar a movimentação de uma lista de tabelas da origem para o DB2. Use os parâmetros SRCSCHEMA=ALL e DSTSCHEMA=ALL, no script geninput, para gerar uma lista de todas as tabelas. Edite o arquivo para remover tabelas indesejáveis e divida-o em vários arquivos de entrada a fim de promover uma abordagem de movimentação balanceada, na qual você execute paralelamente as operações de descarregamento dos dados da origem e carregamento para o destino.
  • Depois de dividir o arquivo de entrada de tabelas (gerado pelo script geninput) em vários arquivos, copie o script unload para arquivos diferentes, equivalentes, altere o nome do arquivo de entrada e especifique um diretório diferente para cada processo de descarregamento. Por exemplo, é possível criar 10 scripts unload que descarregue 500 tabelas de cada script unload, totalizando 5.000 tabelas.
  • ####Assegure que a geração de DDL e DATA ocorra em etapas separadas. Não misture os dois em uma única etapa para uma movimentação de dados desse porte.
  • A ferramenta descarrega, em paralelo, os dados das tabelas de origem controlados pelo parâmetro NUM_THREADS no script unload. O valor padrão é 5 e pode ser aumentado para um nível em que a utilização da CPU no servidor de origem gire em torno 90%.
  • Preste atenção nas tabelas listadas no arquivos de tabelas de entrada. O script geninput não tem inteligência para organizar as tabelas em uma ordem específica, mas você terá de ordenar as tabelas de modo que minimize o tempo de descarga. As tabelas listadas nos arquivos de entrada são alimentadas para um conjunto de encadeamentos em forma de rodízio. É possível que todos os encadeamentos tenham concluído o processo de descarga, mas um permaneça em execução. Para manter todos os encadeamentos ocupados, organize o arquivo de entrada das tabelas pelo número de colunas, em ordem crescente.
  • Também é possível que todas tabelas sejam descarregadas e que alguns encadeamentos fiquem protelando a descarga de tabelas muito grandes. Você poderá descarregar a mesma tabela em vários encadeamentos sempre que for possível especificar devidamente a cláusula WHERE no arquivo de entrada. Por exemplo:
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 1 and 1000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 1000001 and 2000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 2000001 and 3000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 3000001 and 4000000

    Verifique se você está utilizando as chaves corretas na cláusula WHERE: preferivelmente, a chave primária ou um índice exclusivo. A ferramenta se encarrega da criação de scripts DB2 LOAD apropriados para carregar os dados dos diversos arquivos gerados por ela. Nenhuma outra configuração é necessária para descarregar a mesma tabela em vários encadeamentos, exceto a inclusão de uma cláusula WHERE diferente, abordada acima.

  • Depois de dividir o processo de descarregamento em vários passos, é possível iniciar a inserção dos dados no DB2 simultaneamente enquanto um lote conclui o descarregamento. A chave aqui é o diretório de saída separado para cada lote de descarga. Todos os arquivos necessários são gerados para a inserção de dados no DB2, no diretório de saída. Para DDL, utilize o script db2ddl gerado para criar as definições da tabela. Para dados, utilize o script db2load para carregar os dados no DB2. Se você combinar DDLs e dados em um único passo, o nome do script será db2gen.
  • Automatize todo o processo nos seus scripts shell, de modo a sincronizar os processos de carga e descarga. Cada movimentação grande de dados do Oracle ou de outros bancos de dados para o DB2 é exclusiva. Você testará as suas habilidades ao determinar como automatizar todas essas tarefas. Salve a saída das tarefas em um arquivo usando o comando tee, assim é possível acompanhar o andamento e a saída será salva em um arquivo de log.

Executar testes simulados

É uma péssima ideia não executar uma movimentação simulada para testar a automação e validar o modo balanceado que você planejou para descarregamento dos dados da origem e carregamento no DB2. O nível de customização se resume apenas à criação de scripts shell para executar tais tarefas na ordem adequada. Siga essas etapas para executar os testes de simulação:

  1. Copie seus scripts de movimentação de dados e os scripts shell de automação para um diretório de simulação.
  2. Descarregue umas tabelas grandes para alguns encadeamentos, para fins de estimativa de tempo, e determine o balanceamento adequado para movimentação de dados.
  3. Ainda para testar essa movimentação, inclua uma cláusula WHERE que limite o número de linhas. Por exemplo, você pode adicionar uma cláusula ROWNUM para limitar o número de linhas no Oracle, ou TOP para o SQL Server.
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE rownum < 100
    "ACCOUNT"."T2":SELECT * FROM "ACCOUNT"."T2" WHERE rownum < 100
    "ACCOUNT"."T3":SELECT * FROM "ACCOUNT"."T3" WHERE rownum < 100
    "ACCOUNT"."T4":SELECT * FROM "ACCOUNT"."T4" WHERE rownum < 100
  4. Coloque seus scripts em prática, faça as alterações necessárias e prepare a execução final.

Execução final

  1. Você já extraiu o DDL e executou as alterações manuais necessárias para o mapeamento entre tabelas e espaços para tabela, se necessário.
  2. Reserve um tempo de inatividade para movimentação dos dados.
  3. Certifique-se de ter cerca de 10.000 cursores abertos configurados para o banco de dados Oracle (caso esse seja a origem).
  4. Consulte a saída no arquivo de log.

O âmago de uma grande movimentação de dados está no planejamento, na disciplina e na habilidade de automação de tarefas. A ferramenta supre todos os recursos necessários para a movimentação. Esta ferramenta pequena já moveu, da origem para o DB2, bancos de dados imensos.

Suporte da ferramenta

Esta ferramenta não é suportada pela organização de suporte IBM. No entanto, é possível informar erros, problemas, sugestões, solicitações de melhoria no fórum de suporte.

Perguntas frequentes

Perguntas frequentes
Pergunta:É necessário instalar alguma coisa no servidor do banco de dados de origem para que a ferramenta funcione?
Resposta:Não é necessário instalar nada no banco de dados de origem.
Pergunta:Quais as plataformas suportadas?
Resposta:Windows, z/OS, AIX, Linux, UNIX, HP-UX, Solaris, Mac e qualquer outra plataforma que inclua uma JVM.
Pergunta:Estou executando a ferramenta em uma janela shell segura na plataforma Linux/Unix e posso ver algumas mensagens na shell de linha de comando, no entanto, não vejo a GUI e parece que a ferramenta travou.
Resposta:Dependendo das configurações de DISPLAY, a janela GUI abriu no servidor compatível com a exibição. Exporte adequadamente as configurações de DISPLAY. Consulte o administrador do sistema Unix.
Pergunta:Estou tentando mover dados do PostgreSQL, mas não acho o driver PostgreSQL JDBC associado à ferramenta.
Resposta:Não há nenhum driver JDBC fornecido com a ferramenta devido a questões de licenciamento. Obtenha o driver JDBC do banco de dados no seu software licenciado.
Pergunta:Estou executando a ferramenta para mover os dados dos meus bancos de dados Oracle 7 e 8i. Tudo bem usar o driver JDBC do Oracle 9g, 10g ou 11g?
Resposta:Em teoria, SIM. Se você receber algumas exceções, tente alternar para drivers JDBC mais antigos, como classes12.jar ou classes111.jar.
Pergunta:A que bancos de dados a ferramenta pode se conectar?
Resposta:A qualquer banco de dados com um driver JDBC tipo IV. Assim, é possível se conectar ao MySQL, PostgreSQL, Ingres, SQL Server, Sybase, Oracle, DB2 e outros. Também é possível se conectar a um banco de dados que possua um conector ODBC-JDBC; isso coloca o Access na lista.
Pergunta:Qual a versão Java necessária para executar a ferramenta?
Resposta:Pelo menos, o Java 1.5. A dependência do Java 1.5 se resume, basicamente, à parte GUI da ferramenta. Se realmente necessitar de suporte para Java 1.4.2, envie-me uma nota e eu compilarei a ferramenta para o Java 1.4.2, no entanto, a GUI não será executada para a criação dos scripts de drivers de movimentação de dados.

Para determinar a versão do Java, execute este comando.


$ java -version
C:\>java -version
Pergunta:Como verifico a versão da ferramenta?
Resposta:Execute IBMDataMovementTool -version no Windows ou ./IBMDataMovementTool.sh -version no Linux/UNIX
Pergunta:Eu obtenho o erro "Versão 49.0 major.minor não suportada" ou "(.:15077): Gtk-WARNING **: não é possível abrir a exibição: " quando executo a ferramenta.
Resposta:A sua versão do Java é anterior a 1.5. Instale uma versão do Java posterior à 1.4.2 para superar o problema. Damos preferência à instalação do IBM Java.
Pergunta:De que informações dos servidores de banco de dados de origem e DB2 necessito para executar a ferramenta?
Resposta:Endereço IP, número da porta, nome do banco de dados, ID de usuário e senha. O ID do usuário do banco de dados de origem deve ter os privilégios DBA e o banco de dados DB2, o privilégio SYSADM.
Pergunta:Estou executando a ferramenta da minha estação de trabalho do Windows e ela está executando extremamente devagar.
Resposta:A memória padrão alocada para a ferramenta no script de comandos IBMDataMovementTool.cmd ou IBMDataMovementTool.sh é de 990MB com a opção -Xmx da JVM. Tente reduzir a memória, pois talvez você tenha menos memória na sua estação de trabalho.
Pergunta:Estou fazendo uma movimentação de dados do SQL Server para DB2 e quero que o meu campo TEXT vá para o VARCHAR no DB2.
Resposta:Especifique mssqltexttoclob=true no arquivo IBMExtract.properties.
Pergunta:Estou fazendo uma movimentação de dados de Sybase para DB2 e ela não moveu os meus procedimentos T-SQL para DB2.
Resposta:A finalidade da ferramenta é a movimentação apenas de DDL e DATA. Será necessário usar o MTK para a movimentação de procedimento / acionadores.
Pergunta:Estou fazendo uma movimentação de DDL do Sybase para o DB2 e os meus objetos Sybase estão em um arquivo. Não achei nenhum modo para especificar o arquivo DDL como origem de dados.
Resposta:A finalidade da ferramenta é movimentação de dados de alta velocidade e, por isso, não há nenhum recurso para transformar um arquivo DDL de um banco de dados para o DB2. Você pode usar, no entanto, o IBM InfoSphere Data Architect para transformar um DDL de um banco de dados de origem para um de destino.
Pergunta:Estou fazendo a movimentação de dados do MS Access para o DB2 mas não encontro todos os índices etc no DDL gerado.
Resposta:Usamos um conector ODBC-JDBC básico para a conexão com o banco de dados MS Access. Precisaremos de um driver JDBC comercial diferente para obter o conjunto completo de DDLs. Você pode tentar o driver JDB da HXTT para MS Access. Se você usar o driver da HXTT, especifique DBVENDOR=hxtt no script unload gerado em vez de access.
Pergunta:Estou fazendo uma movimentação de dados do Sybase para o DB2 com a ferramenta e recebendo centenas de erros.
Resposta:É bem possível que o seu banco de dados Sybase não esteja habilitado com o suporte de JDBC exigido. Consulte seu Sybase DBA para garantir que os procedimentos armazenados JDBC corretos estão instalados no banco de dados do Sybase.
Pergunta:Estou fazendo uma movimentação de dados do MySQL para o DB2 e fiquei sem memória.
Resposta:Tente diversos valores com FETCHSIZE=nnn no script unload gerado e execute a movimentação de dados na linha de comando. Se você usar a ferramenta GUI, ela sobrescreverá o script unload.
Pergunta:Estou fazendo um movimentação de dados do Oracle para o DB2 e vi que há 3 arquivos jars necessários para a movimentação de dados. No meu entender, é necessário apenas um driver JDBC para a movimentação de dados. Por que há arquivos jar adicionais?
Resposta:Os arquivos JAR adicionais são principalmente necessários para os tipos de dados do Oracle XML. Você deve obtê-los no diretório de instalação do seu Oracle.
Pergunta:Eu quero que o tipo de dados CLOB do Oracle seja movido como DBCLOB no DB2.
Resposta:Abra o arquivo IBMExtract.properties e defina DBCLOB=true
Pergunta:Estou usando a ferramenta para mover dados do Oracle para o DB2 e recebendo muitos erros do Oracle SQL informando que não foi possível localizar uma tabela.
Resposta:O ID do usuário da conexão com o Oracle deve ter os privilégios DBA e SELECT_CATALOG_ROLE.
Pergunta:Não quero que NCHAR e NVARCHAR2 sejam movidos como GRAPHIC ou VARGRAPHIC no DB2. Desejo que eles sejam movidos como CHAR e VARCHAR2, já que criei meu banco de dados DB2 como UTF-8.
Resposta:Vá para o arquivo IBMExtract.properties e defina GRAPHIC=false
Pergunta:É possível fazer a movimentação de dados dos Oracle para uma versão do DB2 anterior a V9.7/V9.5?
Resposta:Sim. Vá para IBMExtract.properties e defina db2_compatibility=false
Pergunta:Notei que a sua ferramenta moveu o NUMBER(38) do Oracle para o NUMBER(31) e acredito que o DB2 suporte apenas até 31. Eu não quero arredondar para baixo, prefiro converter para DOUBLE.
Resposta:Abra o arquivo IBMExtract.properties e defina roundDown_31=false
Pergunta:Estou obtendo um monte de dados rejeitados. Como reunir os dados rejeitados em um arquivo para que eu analise o motivo da rejeição.
Resposta:Abra o arquivo IBMExtract.properties e defina dumpfile=true
Pergunta:Estou obtendo erros ao carregar dados de uma estação de trabalho para um servidor DB2. A ferramenta deve ser executada apenas no servidor?
Resposta:É preferível que ela seja executada no servidor DB2 para extrair dados do banco de dados de origem e evitar um servidor intermediário. Contudo, para que ela execute em um servidor intermediário, basta especificar REMOTELOAD=TRUE no script unload gerado. Lembre-se de que o utilitário DB2 LOAD requer que os dados BLOBS/CLOBS/XML estejam disponíveis no servidor. Será necessário montar esses diretórios com a mesma convenção de nomenclatura no servidor DB2 de destino.
Pergunta:O único meio que possuo para efetuar login no servidor DB2 é shell SSH e nós não permitimos a execução de X-Windows no servidor DB2. Como executar a ferramenta no modo GUI para mover DDL e DATA?
Resposta:Execute IBMDataMovementTool.sh no SSH e, caso não haja nenhum suporte para gráficos, a ferramenta alternará automaticamente para a entrada da linha de comando. Se isso não ocorrer por algum motivo, especifique a opção -console no comando IBMDataMovementTool.sh e isso forçará a execução da ferramenta no modo linha de comando interativo. O modo linha de comando é apenas um meio para se obter a entrada e gerar os scripts necessários para a movimentação dos dados. A GUI é apenas um meio para gerar os scripts; o verdadeiro trabalho é realizado exclusivamente pelos scripts.
Pergunta:Por que você não criou o banco de dados DB2 usando o seu script em vez de solicitar o nome do banco de dados.
Resposta:Normalmente, os DBAs gostam de criar os bancos de dados de acordo com as informações dos caminhos de armazenamento. No entanto, criamos os espaços de tabela necessários para que as tabelas sejam inseridas automaticamente no espaço de tabela apropriado do DB2. Leia os documentos de boas práticas da IBM para planejar criteriosamente seu banco de dados. É recomendado que o banco de dados DB2 seja criado com o tamanho de página 32K como padrão.

Reconhecimentos

Muitos IBMistas ao redor do mundo forneceram feedback valioso sobre a ferramenta, sem o qual não seria possível oferecê-la na configuração atual. Reconheço a importância da ajuda, feedback, sugestões e orientação que recebi das seguintes pessoas.

  • Jason A Arnold
  • Serge Rielau
  • Marina Greenstein
  • Maria N Schwenger
  • Patrick Dantressangle
  • Sam Lightstome
  • Barry Faust
  • Vince Lee
  • Connie Tsui
  • Raanon Reutlinger
  • Antonio Maranhao
  • Max Petrenko
  • Kenneth Chen
  • Masafumi Otsuki
  • Neal Finkelstein

Renúncia de responsabilidade

Este artigo contém uma ferramenta. A IBM concede ao usuário (o "Licenciado") uma licença não exclusiva, isenta de royalties, para utilização desta ferramenta. A ferramenta, porém, é fornecida no estado em que se encontra, sem nenhum tipo de garantia EXPRESSA OU IMPLÍCITA, INCLUINDO QUAISQUER GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA OU NÃO-VIOLAÇÃO. A IBM E SEUS LICENCIANTES NÃO DEVEM SER RESPONSABILIZADOS POR QUAISQUER DANOS SOFRIDOS PELO LICENCIADO QUE SEJAM DECORRENTES DA FORMA DE UTILIZAÇÃO DO SOFTWARE. EM HIPÓTESE ALGUMA A IBM OU SEUS LICENCIANTES SERÃO RESPONSÁVEIS POR QUAISQUER DANOS ASSOCIADOS A PERDAS POR LUCROS CESSANTES, INTERRUPÇÃO NOS NEGÓCIOS OU PERDA DE DADOS) OU POR QUAISQUER OUTROS DANOS DIRETOS, INDIRETOS, ESPECIAIS, CONSEQUENCIAIS, INCIDENTAIS OU PUNITIVOS QUE VENHAM A SER CAUSADOS, INDEPENDENTEMENTE DA TEORIA DA RESPONSABILIDADE, QUER SEJAM DECORRENTES DO USO OU DA INABILIDADE NO USO DO SOFTWARE, MESMO QUE A IBM TENHA SIDO INFORMADA PREVIAMENTE INFORMADA SOBRE A POSSIBILIDADE DA OCORRÊNCIA.


Download

DescriçãoNomeTamanho
IBM Data Movement Tool1IBMDataMovementTool.zip900KB

Nota

  1. Esta ferramenta usa os pacotes JGoodies Forms 1.2.1, JGoodies Look 2.2.2 e JSyntaxPane 0.9.4 da interface GUI.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=406541
ArticleTitle=DB2 9.7: IBM Data Movement Tool
publish-date=06262009