O migrador de ambiente é a primeira funcionalidade implementada no utilitário DBTools do . Ele foi concebido para oferecer uma forma eficiente e segura de copiar uma base de dados do ERP Microsiga / Protheus entre dois bancos de dados quaisquer homologados pelo
. A ferramenta de migração permite seu uso em modo interativo – onde você parametriza as conexões de origem, destino e parâmetros de cópia pela interface – ou o modo "batch", onde a ferramenta usa um arquivo de configuração que pode ser fornecido como parâmetro para obter os detalhes da operação de cópia a ser realizada, sem paradas ou iterações com o usuário, apenas mostrando as etapas de execução na tela em modo "corrido", gravando um LOG com mais detalhes das operações realizadas.
A ferramenta de migração não acessa diretamente os bancos de dados, mas usa o para acessar os bancos de dados de origem e destino das tabelas a serem copiadas. Logo, a topologia mínima necessária para uso do migrador é :
Uma outra topologia sugerida é configurar dois DBAccess atualizados, preferencialmente um em cada máquina onde está cada banco de dados, e executar o DBTools para a migração em uma delas – tanto faz a máquina de origem como a de destino.
A utilização da ferramenta de migração normalmente envolve as seguintes etapas:
A primeira execução do programa vai criar um arquivo chamado "dbtools.ini", e dentro dele colocar todas as configurações possíveis de serem realizadas para o aplicativo com seus valores default. E, também deve criar um arquivo chamado "dbools.log", onde será armazenado o registro de operações realizadas. O arquivo de configurações pode ser editado por um editor de textos simples – notepad, notepad++, vi, etc – para ser usado por exemplo em uma operação em batch. Vamos ver a título de exemplo uma cópia passo a passo de tabelas entre um MSSQL e um Postgres.
No exemplo proposto, vou usar apenas um DBAccess para fazer a cópia dos dados, configurando as ODBCs na máquina onde está o DBAccess para acessar ambos os bancos de dados. Feitas as configurações de ambos os bancos no DBAccess e os respectivos testes de conexão, vamos executar o migrador em modo interativo, executando direto o aplicativo "dbtools.exe". No caso eu criei um atalho para o aplicativo, determinado a resolução de tela 80x25 – mínima necessária para a ferramenta.
A navegação entre as opções não é feita por mouse ou setas de direção, a opção desejada deve ser informada e pressiona-se ENTER para continuar. Para acessar o migrador, digitamos "1" e pressionamos ENTER.
São quatro opções disponíveis, normalmente executadas em sequência, para realizarmos a cópia das tabelas entre os bancos de dados.
Na parte superior da tela, é informado que ainda não conectamos com o DBAccess para a origem de dados, nem para o destino. Vamos começar informando a origem dos dados e estabelecendo a conexão, executando a opção "1".
Ao acessarmos a definição da origem dos dados, devemos informar o servidor e a porta onde está o DBAccess que será usado para ler os dados do banco de origem, o tipo do banco, o nome do ALIAS / DSN do Banco de Dados, e caso este DBAccess possua um usuário de monitoramento para administração via DBMonitor, devemos informar o usuário e a senha utilizadas. Cada uma destas definições pode ser alterada ou configurada executando a opção de número correspondente, informando o valor da configuração e pressionando ENTER. A tela de definição da conexão de destino é exatamente igual a essa, somente muda o título da janela, veja abaixo:
|
Após preencher os dados, estabelecemos a conexão de origem executando a opção 7 - Conectar com o SGDB. Veja abaixo o exemplo da minha conexão com o banco MSSQL configurado:
Passo 02 - Conexão de Origem dos dados
Ao retornar para a tela anterior, usando a opção "0", entramos na Conexão de destino dos dados, e informamos o nosso banco de dados de destino. No meu caso, as configurações ficaram assim:
Uma vez que as conexões estejam estabelecidas, elas são vísiveis no DBMonitor, veja imagem abaixo:
Passo 03 - Parâmetros de Cópia
Ao acessarmos a opção 3, são trazidos os parâmetros default para a cópia de dados. Você pode alterar estes parâmetros no momento da execução via interface, mas eles não serão salvos no arquivo de configuração "dbtools.ini". Por outro lado, ao alterar os parâmetros deste arquivo usando um editor de texto, ao executar o programa DBTools, os valores especificados serão lidos e utilizados pela aplicação. Veja abaixo os valores default da aplicação:
Passo 04 - Executar a cópia
Confirmados os parâmetros, voltamos ao menu anterior e executamos a opção 4 – Executar a cópia. Ao ser acionada, é mostrado na tela um resumo dos parâmetros de cópia, a quantidade de tabelas que satisfazem os critérios de busca e exclusão de cópia, seguido tamanho estimado dos dados de todas as tabelas a serem avaliadas, veja na imagem abaixo:
Confirmados em tela os parâmetros e a quantidade estimada de tabelas e dados, podemos iniciar a operação, pressionando "S" seguido de "Enter".
|
Tamanho estimado dos Dados
O tamanho estimado dos dados está sujeito a variações, para mais ou para menos, e afeta apenas o cálculo do tempo estimado de cópia. Os números informados de volume e registros copiados são reais e incrementados ao longo da execução do processo. Cada banco de dados definido como origem das tabelas possui uma abordagem específica para obter estas informações dos catálogos do banco de forma rápida, sendo que o usuário usado na conexão do SGDB de origem precisa ter os privilégios de SELECT / QUERY nas seguintes views:
Acompanhamento do processo de cópia
Durante o processo de cópia, uma interface de status de cópia mostra as etapas de cópia sendo concluídas pelos processos em execução, veja exemplo abaixo:
|
Na parte inferior da tela, as informações mostradas são:
Quando iniciamos com o número de processos "0" (zero), o migrador sobe o primeiro processo dedicado de cópia, e 90 segundos depois guarda o desempenho médio de cópia e sobe um novo processo para copiar tabelas simultaneamente. A cada 90 segundos, o migrador avalia o desempenho antes de subir o último processo comparado com o desempenho atual, e caso houve aumento do desempenho, ele sobe mais um processo, e guarda o desempenho atual para a próxima comparação. Dessa forma, ele somente vai parar de subir novos processos, quando for detectado que subir um novo processo não aumentou o desempenho total do processo em volume de cópia. Normalmente este patamar é atingido quando o limite de banda de rede, ou de throughput de leitura ou gravação foram atingidos. Esta forma, é esperado que o consumo de recursos durante a cópia seja a capacidade computacional total do ambiente envolvido. Caso seja especificado um valor fixo de processos, maior que zero, a ferramenta logo de início sobe os processos de cópia informados, e somente finaliza estes processos quando não houverem mais tabelas na fila de cópia.
Durante o processo de cópia, é possível visualizar e monitorar as conexões nos DBAccess envolvidos no processo usando o DBAccess Monitor, vide imagem abaixo:
Passo 05 - Conclusão do processo
Terminada a cópia, é mostrada uma tela final com algumas estatística, vide imagem abaixo:
O registro de LOG da operação completa neste exemplo foi salvo no arquivo "dbtools.log", e contém muito mais detalhes das operações realizadas, como por exemplo todas as configurações e informações dos bancos de dados de origem e destino, a estrutura de cada tabela envolvida na cópia, os índices identificados e criados no destino, o tamanho de dados real de cada tabela determinados durante a cópia, entre outras informações. Para sair do programa após a cópia, basta retornar ao menu principal através da opção "0" (zero). Como as conexões de origem e destino ainda estão estabelecidas, a aplicação apenas pede para você confirmar a saída.
Somente é possível continuar novamente uma cópia interrompida nos seguintes casos:
Ao reiniciar a cópia com a configuração de continuação / recuperação (resume), caso uma tabela já exista no ambiente de destino, a ferramenta fará uma contagem dos registros em ambos os bancos, e copia apenas os registros que faltam – a partir do último registro previamente copiado. Não há comparação dos dados, apenas a contagem de linhas da tabela.
Execução em modo BATCH
Partindo do arquivo de configuração default criado pela ferramenta (dbtools.ini), podemos alterá-lo com um editor de texto de arquivos ASCII e preencher as chaves com as informações de cópia, e então executar o migrador pela linha de comando, usando o parâmetro "/batch", onde o processo será executado automaticamente usando a interface apenas para mostrar o echo das etapas de execução do processo. No exemplo acima, onde as configurações default foram mantidas, e apenas informamos os bancos de dados de origem e destino, o arquivo "dbtools.ini" ficaria assim:
[general] threads=0 overwrite=0 resume=0 copydeleted=0 copyempty=1 createindex=1 errorstop=1 keeprecno=0 copymask=% ignoremask=%bkp,%log [sourcedb] dbserver=localhost dbport=7890 dbdatabase=mssql dbalias=envp12123 dbuser= dbpsw= [targetdb] dbserver=localhost dbport=7890 dbdatabase=postgres dbalias=envp12pgsql dbuser= dbpsw= |
Exemplo de execução:
dbtools /batch
Existem outros parâmetro de linha de comando que permitem especificar o nome de um arquivo diferenciado de configuração, um arquivo diferenciado de log a ser gerado, entre outros. Para a lista completa de parâmetros, execute "dbtools /help":
DBTools V 1.20190829 RC1 (Copyright 2019 TOTVS S/A) Ferramenta de linha de comando do DBAccess DBTOOLS [opcoes] /help or /? Esta mensagem de ajuda. /nolog Nπo gera log de execucao. /noansi Nao usa cores e/ou terminal ANSI /log <logfile> Arquivo de LOG (default=dbtools.log). /config <cfgfile> Arquivo de Configuracao (default=dbtools.ini). /batch Executa o processo em modo BATCH. |