A funcionalidade Migrador de Ambiente do DBTools oferece uma forma eficiente e segura de copiar uma base de dados do ERP TOTVS - Linha Protheus entre dois bancos de dados quaisquer (consulte as versões homologadas para o ).
Esta ferramenta permite o uso de modo interativo, onde você parametriza as conexões de origem e destino, além dos parâmetros de cópia pela interface. Há também 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 databases de origem e destino.
Logo, a topologia mínima necessária para uso do migrador é :
Outra topologia sugerida é configurar duas instâncias do |
A utilização da ferramenta de migração normalmente envolve as seguintes etapas:
Requisitos:
Serão migradas apenas as tabelas que contenham os campos de controle do |
A primeira execução do programa criará os arquivos:
Arquivo | Descrição |
---|---|
dbtools.ini | Neste arquivo, serão inseridas todas as configurações possíveis de serem realizadas para o aplicativo com seus valores default |
dbools.log | Neste arquivo serão armazenados os registros das operações realizadas |
Ambos os arquivos podem podem ser editados e visualizados através de um editor de textos simples (notepad, notepad++, vi, etc). |
A seguir, com o intuito de trazer clareza aos procedimentos, veremos o exemplo do passo a passo de uma cópia de tabelas entre um MS-SQL Server e um PostgreSQL.
Neste exemplo, usaremos apenas uma instância do para fazer a cópia dos dados, configurando as ODBCs desta mesma máquina para acessar ambos os bancos de dados.
Concluídas as configurações de acesso de ambos os bancos de dados no e os respectivos testes de conexão, executaremos o migrador em modo interativo (execução direta do aplicativo dbtools.exe).
Vale ressaltar que para o teste, criamos um atalho do executável e determinamos que sua resolução de tela será de 80x25 (resolução mínima e 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 digitando o número correspondente e pressiondo ENTER para confirmar e continuar. Para acessar o migrador, digitamos "1" e pressionamos ENTER. |
Atualmente existem quatro operaçõ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 Vamos começar informando a origem dos dados e estabelecendo a conexão, executando a operação "1". |
Ao acessarmos a definição da origem dos dados, devemos informar o servidor e a porta onde está o 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
possua um usuário de monitoramento para administração via
, 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 exibida no print abaixo (pode haver variação no título da janela):
O usuário e a senha solicitados nas configurações de conexão do DBTools somente devem ser informados se o Se o Caso os dados de acesso informados estejam incorretos, ou sejam informados para um |
Após preencher os dados, estabelecemos a conexão de origem executando a opção 7 - Connect with DBMS.
Veja abaixo o exemplo de uma conexão com o banco MS-SQL Server configurado:
Ao retornar para a tela anterior, usando a opção "0", acessamos a operação de Target Data Connection e informamos o nosso banco de dados de destino.
Para o nosso exemplo, as configurações ficaram assim:
Uma vez que as conexões estejam estabelecidas, elas são visíveis no , veja o exemplo abaixo:
Ao acessarmos a operaçã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:
Parâmetros | Default | Descrição | |
---|---|---|---|
Number of threads | 0 (zero) | Indica que o programa deve escalar os processos automaticamente. Qualquer numero maior que zero indica uma quantidade fixa de processos para cópia simultânea de tabelas – cada processo copia uma tabela. | |
Overwrite tables | Não | Permite especificar se o processo deve apagar e copiar por cima os dados de uma tabela do banco de dados de origem que já exista no banco de dados de destino. | |
Copy deleted records | Não | Permite especificar se o processo deve copiar do banco de dados de origem todos os registros das tabelas, mesmo que estejam marcados para serem deletados – campo D_E_L_E_T_ = ' *' | |
Copy empty tables | Sim | Permite especificar se o processo criará (ou não) as tabelas vazias do banco de dados de origem no banco de dados de destino. | |
Create indexes in target | Sim | Permite especificar se o processo deve identificar os índices de dados e chave única existentes no banco de dados de origem para a tabela a ser copiada, e cria os índices imediatamente após o término da cópia dos dados de cada tabela | |
Stop on error | Sim | Permite especificar se toda a execução caso deve ser abortada caso um dos processos de cópia apresente um erro qualquer (leitura ou gravação de dados)
| |
Keep source RECNO | Não | Por padrão este recurso está desligado e não é necessário. Contudo, caso ativado, mantém a mesma numeração de registros das tabelas de origem para todas as tabelas que não possuam controle de numeração automáticas pelo banco de dados. Os registros das tabelas são lidos e inseridos por ordem crescente de RECNO, representando a ordem física de inserção.
| |
Tables to copy | % | Este parâmetro respeita a sintaxe LIKE (SQL ANSI) para informar uma ou mais máscaras separadas por vírgula para limitar ou especificar as tabelas que devem ser copiadas. Por default todas são (%).
| |
Tables ignored | %BKP,%LOG | Este parâmetro respeita a sintaxe LIKE (SQL ANSI) para informar quais arquivos não devem ser considerados para o processo de cópia, separados por vírgula. Por default arquivos com o sufixo BKP e LOG são ignorados. | |
Resume previous copy | Não | Habilitar esta opção faz com que a ferramenta compare a quantidade de registros de tabelas já existentes no destino com a base de origem e caso a quantidade seja inferior, representando uma cópia parcial, a ferramenta inicia a copia dos demais registros que faltam. Obs.: Este parâmetro atende à casos em que o processo de cópia estava em execução, mas foi interrompido antes de seu término. | |
Use better estimative | Não | Este parâmetro permite uma melhor estimativa de tamanho dos dados que serão migrados. Obs.: O parâmetro está disponível a partir da versão 22.1.1.2 do | |
Adjust (round) numbers | Não | Ao habilitar esta opção, caso existam números com a parte decimal maior que a suportada e definida para o campo eles serão automaticamente arredondados. Obs.: Este parâmetro está disponível a partir da versão 24.1.0.1 do |
Confirmados os parâmetros, voltamos ao menu anterior e executamos a operação 4 – Run data migration.
Ao ser acionada, é exibido 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 do tamanho estimado dos dados de todas as tabelas a serem avaliadas.
Vejamos o print abaixo, que atende ao nosso exemplo:
Confirmados em tela os parâmetros e a quantidade estimada de tabelas e dados, podemos iniciar a operação, pressionando "Y" seguido de "ENTER".
|
O tamanho estimado dos dados está sujeito a variações e pode ser maior que o reportado, pois o tamanho é obtido através de diferentes catálogos para cada banco de dados. Contudo, esta variação 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 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 SGBD de origem precisa ter os privilégios de SELECT / QUERY nas seguintes views:
SGBD | Views |
---|---|
MS-SQL Server | sys.tables, sys.index, sys.partitions |
Oracle | dba_segments |
PostgreSQL | information_schema.tables, pg_relation_size() |
MySQL | information_schema.tables |
DB2 | syscat.tables |
Informix | systables, sysmaster:sysptnhdr |
Durante o processo de cópia, uma interface de status mostra suas etapas sendo concluídas durante sua execução. Vejamos o exemplo abaixo:
|
Na parte inferior da tela, as informações mostradas são:
info | Descrição | |
---|---|---|
Time (hh:mm:ss) | Tempo decorrido em horas, minutos e segundos desde o início do processo de cópia | |
Speed ( V1 / V2 / V3 ) | Três indicadores de desempenho de cópia em KB ou MB por segundo, onde:
| |
Processing <X>/<Y> |
| |
n Recs | transf / estimado |
|
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. Em seguida, um novo processo para copiar tabelas simultaneamente é iniciado.
A cada 90 segundos o migrador avalia o desempenho antes de subir o último processo, comparando com o desempenho atual. Caso haja 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 ao subir um novo processo não houve aumentou no 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. Assim, é 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 envolvidos no processo usando o
.
Vejamos o exemplo abaixo:
Concluída a cópia, uma tela final é exibida com algumas estatística. Vejamos o exemplo 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:
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 copiará 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! |
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.
Para executar o migrador utilizando este arquivo, via linha de comando utilizamos 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.
Neste exemplo, 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:
c:\totvs\dbtools>dbtools.exe /batch |
Existem outros parâmetros 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 22.1.1.2_rc03 (Copyright 2019 TOTVS S/A) DBAccess command line tool DBTOOLS [options] /help or /? This help message. /nolog Does not log the process. /noansi Does not use colors and/or ANSI terminal. /log <logfile> Log file (default=dbtools.log). /config <cfgfile> Configuration file (default=dbtools.ini). /batch Run in BATCH mode. /quiet Turn off echo of the messages in BATCH mode. |