none
Qual a melhor forma de transferir dados de uma tabela para outra (tabelas Identicas)? RRS feed

  • Pergunta

  • Bom dia pessoal,

    Hoje trabalho com dois gerenciadores de banco de dados diferentes um DB2 e outro SQL. No ambiente DB2 existem algumas tabelas que copio para o SQL. Estou usando DTSX para extrair estas tabelas.

    Gostaria de tirar algumas dúvidas com vocês:

    1 - Utilizo um OLE DB Source para mapear a tabela table1 do DB2, faço a comparação com o Lookup mapeando as chaves da table1 do DB2 com a do SQL e mando para o OLE DB Destination se não existir no destino e se existir mando para o OLE DB Command. Lembrando as tabelas do DB2 e do SQL são idênticas.

    Porém em tabelas muito grandes (500 mil registros) a mesma fica demorada ( por causa do comando update ). Minha dúvida é se estou fazendo da forma certa ou existe outra forma melhor de copiar estes registros?

    2 - Meus DTSX estão agendados em jobs, na mesma maquina onde esta o SQL (Destino). Estou notando quando executo 2 jobs ao mesmo tempo parece que eles ficam concorrendo entre si, e os jobs passam a demorar muito mais (parece que ficam meio congelados/parados). Qual a melhor forma de agendar esses jobs? Estou fazendo da maneira certa em agendar os jobs na mesma máquina onde esta o SQL (Destino)? Ou seria melhor uma máquina somente para execução dos jobs (em uma máquina dedicada)?

    Obs.: utilizo o SQL 2008.

    Desde já agradeço a atenção, obrigado.



    Luciano Lopes de Oliveira

    terça-feira, 24 de novembro de 2009 11:13

Respostas

  • Bom Dia,

    Normalmente esse tipo de estratégia é perigoso, pois, você está completamente dependendente da quantidade de registros. O ideal seria que você trabalhasse com alguma marca de tempo em colunas como "data da última alteração", "data de inserção", etc. Assim você só leria registros realmente relevantes ao invés de verificar novamente os mesmos registros em cada carga.

    Se você continuar nessa estratégia, a cada registro inserido suas cargas tendem a tornar-se ainda mais lentas.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    A Impedância, o Mapeamento Objeto Relacional e Implementações – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!814.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Luciano Lopes terça-feira, 24 de novembro de 2009 15:32
    terça-feira, 24 de novembro de 2009 11:22
  • Luciano,

    Além disso, trabalhando com esta marca de tempo, você poderá ter um ganho muito grande com a performance durante o processo de verificação dos seus registro, fazendo a análise somente nos que realmente são necessário serem avaliados.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta Luciano Lopes terça-feira, 24 de novembro de 2009 15:32
    terça-feira, 24 de novembro de 2009 11:54
    Moderador
  • Luciano, nesses casos eu crio uma nova coluna do tipo (Dt da ultima atualização/inclusão) e no meu source eu faço um select para trazer apenas o que é necessário. Para deixar mais dinâmico vc pode criar uma variável (Dt Inicio e Dt Fim) e passar por parametro ao seu select. Vc vai sentir muita diferença na performançe, pois ele vai trazer apenas o que for entre as datas que vc especificou.
    Wyllian de Lima - Se a resposta ajudou vote como útil !
    • Marcado como Resposta Luciano Lopes terça-feira, 24 de novembro de 2009 15:33
    terça-feira, 24 de novembro de 2009 12:23

Todas as Respostas

  • Bom Dia,

    Normalmente esse tipo de estratégia é perigoso, pois, você está completamente dependendente da quantidade de registros. O ideal seria que você trabalhasse com alguma marca de tempo em colunas como "data da última alteração", "data de inserção", etc. Assim você só leria registros realmente relevantes ao invés de verificar novamente os mesmos registros em cada carga.

    Se você continuar nessa estratégia, a cada registro inserido suas cargas tendem a tornar-se ainda mais lentas.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    A Impedância, o Mapeamento Objeto Relacional e Implementações – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!814.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Luciano Lopes terça-feira, 24 de novembro de 2009 15:32
    terça-feira, 24 de novembro de 2009 11:22
  • Luciano,

    Além disso, trabalhando com esta marca de tempo, você poderá ter um ganho muito grande com a performance durante o processo de verificação dos seus registro, fazendo a análise somente nos que realmente são necessário serem avaliados.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta Luciano Lopes terça-feira, 24 de novembro de 2009 15:32
    terça-feira, 24 de novembro de 2009 11:54
    Moderador
  • Gustavo,

    E como eu faria a leitura dos registros através de uma data por exemplo ?

    Desculpe a pergunta é que ainda não tenho muita experiencia com DTSX.

    E obrigado pela ajuda.


    Luciano Lopes de Oliveira
    terça-feira, 24 de novembro de 2009 12:07
  • Luciano, nesses casos eu crio uma nova coluna do tipo (Dt da ultima atualização/inclusão) e no meu source eu faço um select para trazer apenas o que é necessário. Para deixar mais dinâmico vc pode criar uma variável (Dt Inicio e Dt Fim) e passar por parametro ao seu select. Vc vai sentir muita diferença na performançe, pois ele vai trazer apenas o que for entre as datas que vc especificou.
    Wyllian de Lima - Se a resposta ajudou vote como útil !
    • Marcado como Resposta Luciano Lopes terça-feira, 24 de novembro de 2009 15:33
    terça-feira, 24 de novembro de 2009 12:23
  • Boa Tarde.

    Obrigado pela ajuda.
    Luciano Lopes de Oliveira
    terça-feira, 24 de novembro de 2009 15:35