Migrar dados de produção para desenvolvimento e homologação. Quais melhores estratégias ?
Desejo que as bases de um sistema em ambiente de desenvolvimento e de homologação sejam atualizadas diariamente, ou quando precisar imediatamente, pegando dados de produção. De preferência não a base toda. Só uma amostra, e mantendo a integridade referencial. Para uma base total que possui uns 2 Tb.
Na minha empresa, os vários sistemas possuem suas bases emaranhadas. Sendo que para cada sistema, geralmente existe só um banco para escrita, mas há vários outros bancos de outros sistemas para leitura.
Soluções adotadas no mercado:
Uma solução praticada mais comum, é por ETL onde vc personaliza a carga. Um lado negativo disso que é que vc tem que personalizar a carga e atualizar o ETL quando for feito as alterações de estruturas de banco. Ou seja, um ETL pra casa sistema (que possui um grupo de bases).
Sei que existem soluções pagas como a Delphix, que é caro demais. Mas possui as vantagens: permite gerar sandbox de dados; replicar base de produção para quantas bases quiser, inclusive uma réplica de base para cada desenvolvedor; pode gerar bases pequenas com somente parte dos dados ou base completa gastando pouco armazenamento; permite anonimizar dados.
Existem os serviços como o DMS (data migration service) da AWS, por exemplo. Mas creio que replica e sinconiza a base toda. Mas não conheço profundamente, e nem o preço.
Minhas ideias
Se eu fosse implementar um ETL que faça essa replicação, a solução que imagino deve ser flexível para funcionar para qualquer sistema considerando os seus inúmeros bancos e forma de integração entre os bancos externos (de outros sistemas).
Ex: Vamos supor que para um sistema x, eu tenho um banco/esquema (sistemax) contendo as tabelas em Oracle:
- sistemax.nota_fiscal,
- sistemax.produto_nota_fiscal,
- base_central.empresas.
Consideremos que essas tabelas estejam conectadas, mas que a tabela empresas não é uma tabela do sistema x, estando no esquema base_central.
A ordem sugerida pra popular os registros é:
- empresas
- produto_nota_fiscal
- nota_fiscal
Então, supondo que quero trazer todas as notas fiscais de um dia D.
A minha solução de migração deve navegar em todas as tabelas, começando pela tabela de nota_fical, e percorrer todas as outras tabelas via seus relacionamentos, inclusive se conetar a esquemas/bancos externos, trazer os dados na ordem de hierarquia de relacionamento (tabelas pai primeiro, filhas depois). E verificar se as estruturas de origem e destino estão equivalentes.
Seria perfeito se essa solução ETL conseguisse servir pra qualquer estrutura de banco. Passando por parâmetro apenas a tabela principal e data de registro que eu quero levar, bancos de origem e bancos de destino. O resto o ETL faz automaticamente, migrando a base toda e todas suas interligações.
Surgem alguns problemas no meio do caminho: ids que já são usados em dese, o que se faz ? E os sequences de ids ?
Daria pra desativar as sequences durante a inserção em dese ? Ou a única seria migrar para uma base de dese que esteja limpa ?
Conclusão:
Existem ou outros caminhos, estratégias e ferramentas que posso usar pra fazer essas migrações ?
Se a minha ideia for praticável, que ferramenta seria a melhor pra isso (Pentaho, Python) ?