Forum Pplware

Versão Completa: Dúvida sobre Migração de Dados ...
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Boa tarde.

O meu problema de hoje é um pouco diferente, e para o qual já tenho algumas ideias, mas gostaria de colocar aqui a discussão sobre qual o melhor método para proceder a uma migração de dados, de por exemplo, Informix para SQL Server ou Oracle.

Como disse anteriormente tenho uma ideia mais ou menos concreta sobre o que fazer, e ela passa por:
1 - Fazer um export do schema da base de dados em Informix. Se for possível fazer o export com dados, senão fazer apenas da estrutura
2.1 - Se o export com dados for possível, então apenas terei de fazer de alguma forma um mecanismo que faça a importação do schema para o SQL Server ou Oracle.
2.2 - Se não for possível fazer a migração com dados então o que penso fazer é o seguinte:
2.2.1 - Importar o schema com a estrutura de tabelas, views, constraints, ... para o SQL Server ou Oracle
2.2.2 - Fazer em C#, por exemplo, uma rotina que para cada tabela (tendo em atenção as constraints e foreign keys entre elas) se ligue ao Informix e saque os dados para depois os ir inserindo nas tabelas dos lado do SQL Server ou Oracle.

O que acham? Acham que isto é possível? Acham que seria melhor optar por outra estratégia? Qual?

Obrigado!
Dá-lhe : 2.2.2 - Fazer em C#, por exemplo, uma rotina que para cada tabela (tendo em atenção as constraints e foreign keys entre elas) se ligue ao Informix e saque os dados para depois os ir inserindo nas tabelas dos lado do SQL Server ou Oracle.
: )
Para mim é a forma mais correcta. Com um script adquires os dados todos de uma base de dados e inseres na pretendida.
O SQL Server tem uma rotina de importação de dados e/ou base de dados inteiras. Com informix nunca testei, agora de Access e MySQL funciona...
Apanhando apenas o caso de Informix para Oracle, verifiquei que existem alternativas na Net que fazem o processo todo. O problema é que são pagas e ... bem pagas.
Existe inclusive o Oracle Migration Workbench.

Já alguém usou? Dá para passar tanto estrutura das tabelas como os próprios dados? E haverá restrições?
Para os dados Oracle, tens o SQL Loader.

A performance é brutal, e a única coisa que tens que fazer é ter os dados num txt separados por um determinado carácter.
Depois parametrizar um ficheiro de controlo (CTL) de forma simples e "já está".

aqui

O SQL Loader é quase uma arte, permite inclusivamente lookup's a determinadas colunas, como por exemplo tu teres no ficheiro source um código, e na criação do CTL dizes que aquela coluna vai fazer um lookup qualquer e o que é escrito na DB é uma descrição e não o código que vem no flat file. É um mundo.

Tem ainda outra vantagem, que é não gerar archive logs, o que para data loads grandes, é uma coisa que convém.

Caso não utilizes o SQL Loader para Oracle, aconselho-te vivamente a desligares os archives do Oracle antes de começares a meter para lá dados, senão não há discos que aguentem com os archives que irão ser gerados. (estou a falar quando se importam alguns milhões de registos)

Quanto ao esquema, eu pessoalmente nunca precisei de migrar schemas de db's, porque tenho sempre os scripts de criação.

Criar uma aplicação em C# para fazer isso, não é mesmo nada aconselhável, vais ter uma performance a roçar o medíocre para não dizer nada pior.
Um colega fez uma app em C# ou AutoIT nem sei já, que mais não era que um parser, um ficheiro que levava uma hora a processar, quando lhe disse para fazer aquilo em C, passou para cerca de 10 segundos. Isto apenas para dar uma "ordem de grandeza" do buraco que estamos a falar.

Não conheço informix, mas tens com certeza tools de consola para exportar dados, portanto é extrair num formato controlado e já ao jeito do sql loader, depois ter um CTL preparado e .... pimba

Uma coisa que pode influenciar bem a estratégia é a frequência com que vais fazer isto.

Para coisas automáticas, convém a todo o custo usar tools de consola que possam ser automatizadas.
Se for OneShot, a solução pode ser menos optimizada desde que dê pouco trabalho, compensa.

PS: O SQL Loader, vem com a instalação do Oracle Client

Para SQL Server, usa os DTS ou nas novas versões os DTSX.
São simples de criar os workflows, e as conexões.
E é visual Wink
Apenas a performance não é minimamente impressionante, mas tudo isto é relativo à quantidade de dados que estamos a falar.

Eu mesmo em Oracle, para exportar/importar dados de uma tabela com com 20MB, tenho um nível de preocupação totalmente diferente de quando exporto/importo um set de tabelas que comprimido são 9GB Smile
@JPedrosa

Diz-me só uma coisa ... com o SQL Loader e recurso ao ficheiro CTL, posso importar um schema inteiro ou é tabela a tabela?
A minha necessidade prende-se com o facto de precisar de exportar uma base de dados inteira (Informix) para Oracle, e isso poderá ter repercussões quando falamos em chaves estrangeiras e views, por exemplo, certo?

No link que enviaste reparei que afirmam que tem suporte para multi-table load, no entanto não encontrei nenhum exemplo. Terei de fazer um Package ou uma procedure em PL/SQL para que ele me faça esse processo todo?

Obrigado!
Ora viva,
tu na realidade, não queres migrar os dados, mas sim recriar uma db informix em Oracle Wink
Isto altera um pouco as coisas.

O modo multi table, não é bem o que "parece". Embora não o use, a ideia é ter uma condição. Por exemplo se a coluna X extiver nula, mete na tabela Y senão vai para a Z

O ideal, é criares um CTL por tabela, e fazeres o unload dos dados do Informix tabela a tabela também.

Depois disso é que crias as constraints, e podes, tanto quanto me informei hoje, extrair o DDL do Informix e actualizar para a sintaxe Oracle e executar.

Não precisas ter os indexes/constraints criados na altura da importação, porque estes só te vão atrasar. além disso, se os constraints da db nova forem iguais aos da source, não há razão para teres problemas aí.
A não ser que faças o unload do informix com a ele a correr .... não é boa ideia naturalmente.

Como alternativa a isto, tens de facto o Workbench, e não é a pagantes...
Eu saquei com o meu login, e tipicamente só posso sacar cenas que não precisem de um partner login.
@JPedrosa

Ok, percebi então que o Oracle Migration Workbench pode ser a minha solução. Mas diz-me uma coisa. O Workbench recria-me a Base de Dados toda, certo? Tabelas, Views, Indexes, ....
Outro problema que se me surge prende-se com os procedures de informix, que penso que terão de ser refeitos uma vez que a linguagem é diferente.

Se o Workbench não é a pagantes, melhor ainda ... pois money é o que falta ... :-)

---------------- (já vi. Afinal o Workbench até os stored procedures importa ... começo a apaixonar-me pelo Oracle Migration Workbench ... )
The Oracle Migration Workbench (OMWB) is a free tool that simplifies the process of migrating third party databases like Sybase, Informix, and DB2 databases to the Oracle platform. The Oracle Migration Workbench migrates the entire database schema, including triggers and stored procedures, in an integrated, environment. It can also perform the data move either online using JDBC or offline using scripts.
URL's de Referência