Migração de banco de dados legado, sem perder dado.
Access, Paradox, Firebird, SQL Server antigo ou Oracle levados para PostgreSQL ou SQL Server atual. Levantamos o que o banco guarda de verdade, limpamos o que está sujo, ensaiamos a migração quantas vezes for preciso, com conferência automática, e fazemos o corte com plano de retorno, sem parar a operação.
Em quase toda migração de software legado, o maior risco não está no código: está nos dados. Uma tela mal reconstruída aparece no primeiro dia e é corrigida. Um saldo migrado errado aparece no fechamento do mês, depois de dezenas de decisões tomadas em cima dele. Por isso a migração de banco de dados é tratada como frente própria, com método próprio, e não como um "exporta e importa" no fim do projeto.
Os bancos típicos de sistema legado
Cada família traz um tipo de problema. Saber qual é o seu ajuda a prever onde está o trabalho.
| Banco de origem | Onde costuma aparecer | O que dá trabalho |
|---|---|---|
| Microsoft Access | Sistemas departamentais, VB6, planilhas que viraram sistema. | Arquivo compartilhado em rede que corrompe, limite de 2 GB por arquivo, consultas e regras dentro do próprio arquivo, pouca integridade referencial declarada. |
| Paradox | Sistemas Delphi antigos, via BDE. | Uma tabela por arquivo, índices que corrompem, BDE descontinuado, tipos e codificação de texto pouco padronizados. |
| Firebird / InterBase | ERPs e sistemas Delphi, muitas vezes em versões 1.5 ou 2.x. | Bancos criados com charset NONE, muita regra em triggers e procedures, generators que precisam virar sequências. |
| SQL Server antigo | Sistemas .NET Framework, VB6 e Delphi mais recentes. | Versões 2008, 2012 e 2014 já sem suporte estendido da Microsoft; procedures longas, collation, recursos descontinuados. |
| Oracle | Sistemas corporativos maiores. | Custo de licença; PL/SQL e packages, que não existem como tal no PostgreSQL; diferenças sutis de tipos e de comportamento. |
Um exemplo de diferença sutil: no Oracle, texto vazio é tratado como NULL; no PostgreSQL e
no SQL Server, não. Uma consulta que filtra "campo é nulo" passa a devolver outro resultado depois da
migração, sem erro nenhum. É esse tipo de detalhe que só aparece em ensaio com dado real.
A sujeira que todo banco legado tem
Banco que está em produção há quinze anos acumula de tudo. Não é descuido de ninguém: é o resultado de versões, de gente diferente mexendo e de urgências resolvidas no improviso. O que mais encontramos:
- Duplicidade. O mesmo cliente cadastrado quatro vezes, com grafias diferentes, cada cadastro com parte do histórico.
- Campos multiuso. O campo
OBSque guarda telefone, e-mail e um código de rota; oCOMPLEMENTOque virou flag de cliente especial. - Datas problemáticas. Datas guardadas como texto em formatos misturados, datas impossíveis, e o famoso 30/12/1899, que é a data "zero" do Delphi e do Access e aparece onde a data deveria estar vazia.
- Codificação e acentuação. Texto gravado em Latin1 ou Windows-1252, às vezes num banco que declara outra coisa. Na conversão para UTF-8, "ação" vira "ação" se a origem for lida com a codificação errada.
- Registros órfãos. Itens de pedido cujo pedido não existe mais, movimentos de um produto apagado. O banco antigo aceitava porque não havia chave estrangeira declarada; o novo, com integridade, recusa.
Nada disso se resolve com uma ferramenta de exportação. Cada caso pede uma decisão: corrigir, unificar, arquivar ou manter como está, e quem decide é quem conhece o negócio.
Regras escondidas em triggers e procedures
Em muitos sistemas, parte importante da regra de negócio não está na aplicação: está no banco. Um trigger que baixa o estoque quando o pedido é faturado. Uma procedure que calcula comissão. Uma view que a contabilidade consulta todo mês sem saber de onde vem.
Migrar só as tabelas e esquecer esses objetos é o jeito mais rápido de ter um sistema que "funciona" e calcula errado. No levantamento, cada trigger, procedure e view é lido e documentado. Depois decidimos, um por um, se ele é reescrito no banco novo ou se a regra sobe para a aplicação, onde fica mais fácil de testar e de manter.
O processo de migração de dados
A NasteSoft e seus parceiros já migraram bancos de dados e aplicações em Delphi, VB6 e .NET. O processo que usamos segue a mesma ideia de todo o nosso trabalho com legado: entender e documentar antes de mover qualquer coisa.
- Levantamento e dicionário de dados. Mapeamos tabelas, campos, relacionamentos (os declarados e os que só existem na cabeça da aplicação), volumes, triggers, procedures e integrações. O resultado é um dicionário de dados que diz o que cada campo significa de verdade, não o que o nome sugere.
- Mapeamento origem → destino. Para cada campo do banco novo, de onde vem, com qual transformação. Tipos, tamanhos, codificação, regras de conversão, valores padrão. Esse mapeamento é um documento revisado com a sua equipe, não um script que só o programador entende.
- Saneamento. Duplicidades, órfãos, datas e campos multiuso são tratados com regras explícitas. O que não pode ser decidido automaticamente vira uma lista de pendências para quem conhece o negócio.
- Ensaios repetidos com conferência automática. A migração completa roda muitas vezes, sobre cópias recentes da produção. Cada ensaio termina com conferência entre origem e destino: contagem de registros por tabela, somas de valores e quantidades, saldos, e comparação de registros por amostragem. O ensaio só é considerado bom quando os números batem.
- Corte. Com o tempo de carga conhecido pelos ensaios, escolhemos a estratégia: janela de corte num horário combinado, quando a carga cabe nela, ou carga inicial com sincronização e escrita dupla quando a operação não pode parar.
- Plano de retorno. O banco antigo não é desligado na virada. Existe um plano definido, e ensaiado, de como e até quando voltar para ele se algo der errado.
Imagine uma distribuidora com um ERP em Delphi 7 sobre Firebird 1.5, banco criado com charset
NONE. O primeiro ensaio migra tudo "sem erro", e a conferência mostra que a soma do
contas a receber não bate por centavos e que nomes de clientes aparecem com acentos trocados. As
duas coisas seriam descobertas pelo financeiro semanas depois. No ensaio, custam um ajuste no
mapeamento.
Sem parar a operação
A migração do banco raramente acontece sozinha. Quando ela faz parte de uma troca de sistema, segue o mesmo padrão de substituição incremental: o sistema novo assume uma área por vez, e os dados daquela área passam a ter um único dono. Durante a transição, sincronizações controladas mantêm os dois lados coerentes, e cada etapa pode ser revertida.
Quando a troca é só do banco, como sair de um SQL Server sem suporte ou de um Firebird antigo, a aplicação pode continuar a mesma, com ajustes pontuais no acesso a dados. Isso é comum em sistemas .NET, e é tratado em conjunto com a migração de .NET Framework para .NET moderno. Em sistemas desktop antigos, a troca do banco costuma vir junto com a da aplicação, como descrevemos na migração de sistemas Delphi.
Ferramentas: úteis, não suficientes
Existem boas ferramentas para mover esquema e dados, como o SQL Server Migration Assistant (SSMA), da
Microsoft, para Access e Oracle, e o ora2pg, de código aberto, para Oracle → PostgreSQL. Nós usamos
quando ajudam. Elas convertem estrutura e copiam registros; não sabem que o campo OBS
guarda o telefone, que aquele cliente duplicado precisa ser unificado nem que a procedure de comissão
tem uma exceção para um representante específico. Essa parte é trabalho de levantamento e de conversa
com quem opera.
O que fica com você
- Banco atual, PostgreSQL ou SQL Server, com integridade referencial declarada.
- Dicionário de dados e mapeamento origem → destino documentados.
- Regras de triggers e procedures documentadas, reescritas ou levadas para a aplicação.
- Relatórios de conferência de cada ensaio e do corte final.
- Histórico preservado e o banco antigo arquivado, acessível para consulta.
Perguntas frequentes
Dá para migrar o banco de dados sem trocar o sistema?
Às vezes, sim. Sair de um SQL Server antigo para uma versão atual, ou de um Firebird antigo para um mais novo, costuma ser possível mantendo a aplicação, com ajustes pontuais.
Já sair de Access, Paradox ou de um produto para outro (Oracle para PostgreSQL, por exemplo) quase sempre mexe na aplicação também, porque o SQL, os tipos de dados e o jeito de conectar mudam. O levantamento inicial diz qual é o seu caso.
PostgreSQL ou SQL Server: para qual migrar?
Os dois são bancos sólidos para sistemas corporativos. O PostgreSQL é de código aberto, sem custo de licença, e roda bem em Linux e em qualquer nuvem. O SQL Server faz sentido quando a empresa já tem licenças, equipe acostumada e um ecossistema Microsoft em volta.
A escolha depende de custo total, de quem vai manter e do que já existe na empresa, e fazemos essa conta com você antes de decidir.
Vamos perder dados na migração?
O processo é desenhado para que não. Cada ensaio de migração termina com conferência automática entre origem e destino: contagem de registros por tabela, somas de valores financeiros e quantidades, e verificação de registros por amostragem.
Registros que não podem ser migrados como estão, como órfãos ou datas inválidas, não somem: vão para uma lista de pendências que é resolvida com a sua equipe antes do corte.
O sistema precisa ficar parado durante a migração?
Não por dias. Como a migração é ensaiada várias vezes antes, o tempo de cada etapa é conhecido. Quando a carga cabe numa janela curta, fazemos o corte num horário combinado.
Quando nem isso é aceitável, usamos carga inicial mais sincronização das alterações, ou um período de escrita dupla, e a troca acontece com a operação rodando.
E se algo der errado depois da virada?
Existe plano de retorno antes de existir data de corte. O banco antigo não é desligado na virada: fica preservado, e o plano define até quando e como voltar para ele, inclusive o que fazer com o que foi gravado no banco novo nesse meio-tempo.
Esse retorno é ensaiado, não só escrito.
O banco tem regras em triggers e procedures. Elas se perdem?
Não, se forem levantadas antes. Triggers, stored procedures e views costumam guardar regras de negócio importantes, como cálculo de saldo, baixa de estoque ou geração de numeração. No levantamento, cada uma é lida e documentada.
Depois decidimos, uma a uma, se ela é reescrita no novo banco ou se passa para a aplicação, onde fica mais fácil de testar e manter.
Continue por aqui.
Seu banco de dados ficou para trás?
Conte qual é o banco, a versão, o tamanho aproximado e qual sistema usa ele. Respondemos com uma leitura honesta do caminho, dos riscos e de onde provavelmente está o trabalho.
WhatsApp +55 41 99511-2870 · e-mail rafael.naste@nastesoft.com.br