Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

2/28/2020

Migrando o Informix para o SQL Server


Tem vários programas para migrar o Informix para o SQL Server, a grande maioria pagos, mas encontrei um bem interessante (e código aberto) e resolvei compartilhar com vocês - O SQLines Data é uma ferramenta de transferência de dados, escalável e de alto desempenho, conversão de esquema e validação para a migração de vários bancos de dados. A ferramenta requer conexões com os bancos de dados Informix (ODBC/CLI sem ODBC Manager) e SQL Server (SQL Server Native Client).

Validando e depois transferindo os dados





Comparando a quantidade de linhas de cada tabelas de um banco com outro (bateu)

7 comentários:

  1. Algumas observações sobre a validação dos dados;

    - O Informix trabalha com o DATETIME de segundos até 60 no SQL Server trabalho até 59 – observar como o SQLine gravou no SQL Server;

    - Teve um banco de dados do Informix que todas as vezes que usava o SQLine na hora que eu ia usar a transferencia o aplicativo do SQLine derrubava, testei várias versões de SQLine, suspeito que seja um registro ou algo na tabela que esteja causando isso;

    - Com os anos de uso do Informix, tivemos alguns emuladores que os usuários foram usando, com isso observamos na migração que alguns registros foram gravados com símbolos estranhos no Informix, observar como foi gravado no SQL Server com esse aplicativo;

    ResponderEliminar
  2. Na pasta do SQLine temos 3 arquivos interessantes quando ocorrer algum erro na importação:

    sqldata.log = Mostra o log do erro que deu na transferencia
    sqldata_ddl.sql = Mostra os comandos de drop e de create table da tabela em questão
    sqldata_failed_tables.txt = Mostra as tabelas que deram erro na migração

    Na importação que estava fazendo o erro que estava dando era este:

    [Microsoft][SQL Server Native Client 11.0]Invalid character value for cast specification

    Agora ficou facil resolver;

    ResponderEliminar
  3. Usando o SQLine em um banco caia o programa, dai tinha que rodar de novo pra tentar migrar, depois de tempos tentando observei que o SQLine tem uma aba SETTINGS tem uma opção lá que você pode criar um arquivo TXT e colocar as tabelas que você quer que sejam importadas (Table List from File), coloquei no arquivo uma tabela por vez, rodei até descobrir a tabela que estava dando erro:

    [Microsoft][SQL Server Native Client 11.0]Invalid character value for cast specification

    Foi ter que importar essa tabela via BULK INSERT no SQL Server

    ResponderEliminar
  4. Bom dia Claudemar, estou tentando montar uma base de testes no SQL server, o meu sistema está todo em informix. Eu faço no informix o UNLOAD da tabela em questão com "|", fica tudo certo o arquivo, daí no SQL server eu executo o comando (bcp LogixPRD..ad_item in add_item.UNL -e "c:\log\ad_item.log" -m 500 -c -t "|" -r "|\n" -SSRV1 -Uxxxx -Pxxxx -R"). E ele está dando erro. (#@ Linha 1, Coluna 2: Valor de caractere inv lido para especifica‡Æo de conversÆo @#
    01 14270,0 8035,0 1,0 1100000 SISAL TIPO 3 (BALER) PARAIBA 12000,0 13560,0). O que pode ser.?

    ResponderEliminar
    Respostas
    1. Faz um unload desse arquivo em arquivo sem o delimitador, para ver se tem um | sobrando, depois checa se o arquivo do backup tem algum caracter de | por lá perdido - o comando seria este pra ver:

      cat arquivo.unl | grep "|" | wc -l

      Comigo acontece de varias tabelas terem todos os caracteres | } { [ ] + - < > ( ) * % $ # @ ! (todas as letras):

      Para sair desse cenario tive algumas alternativas:

      1 - No SQL Server Management Studio via Linked Server você pode ler do informix e gravar no SQL Server

      insert into [servidor].[nome_do_banco_sql].[dbo].nome_da_tabela_sql select * from linked_server.nome_do_banco_informix.dba.nome_tabela_informix;

      2 - Outra saida é usar o Bulk Insert, ou os programas de migração ESF ou SQLines Data (pois eles se viram no lance do delimitador)

      Eliminar
    2. Uma outra coisa, você esta dando o comando BCP a tabela existe no SQL Server?

      Eliminar
  5. Excelente post, parabéns pela iniciativa

    ResponderEliminar