AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 1457
Accepted
randomx
randomx
Asked: 2011-02-26 13:15:46 +0800 CST2011-02-26 13:15:46 +0800 CST 2011-02-26 13:15:46 +0800 CST

Qual é o seu fluxo de trabalho para planejar uma migração de dados?

  • 772

Tantas vezes fui contratado no final de um esforço de desenvolvimento de software e ouvi algo como "ok, temos todo esse novo código e requer que as tabelas sejam alteradas e os dados sejam migrados".

Parece que toda vez é um cenário único, disparado do quadril e melhor adivinhado. Eu sinto que esta é a minha habilidade mais fraca como DBA.

Eu gostaria de entrar em alguns padrões para abordar, gerenciar e testar migrações de dados .

Por favor, indique-me algumas das melhores práticas e/ou onde posso obter material de aprendizagem para me ajudar a melhorar nesta área.

migration testing
  • 4 4 respostas
  • 1107 Views

4 respostas

  • Voted
  1. Best Answer
    Joe
    2011-02-26T14:51:35+08:002011-02-26T14:51:35+08:00

    Toda vez que fiz isso, passamos por duas passagens ...

    1. tire um instantâneo e, trabalhando em um servidor diferente, use-o para determinar o que deve ser feito para a migração e faça o script.
    2. depois de ter o script em mãos, o snapshop é restaurado no sistema de teste e é cronometrado para ver se será executado no tempo necessário ou é ajustado e modificado até que possa.
    3. faça com que as partes interessadas assinem que nada parece errado com os dados no sistema de teste.

    Então, durante um fim de semana, você tem uma interrupção programada:

    1. Sexta à noite, os sistemas que usam o banco de dados são desativados, um backup frio completo é feito e os scripts são executados para migrar/modificar/o que quer que seja para os dados
    2. Os sistemas são trazidos de volta em algum endereço privado ou de alguma forma configurados para que não sejam abertos a ninguém, exceto às partes interessadas, para testes de aceitação
    3. Se os stakeholders aprovarem, o sistema é colocado online e tornado público; caso contrário, o banco de dados é restaurado a partir do backup feito na noite de sexta-feira e você inicia o processo novamente.

    Com nossa programação, o pessoal do banco de dados geralmente tinha das 18h na sexta-feira às 10h no sábado para executar os scripts de backup e migração, então nosso objetivo era que eles rodassem em menos de 8 horas (~ 6 delas eram backups), então nós d ter algum tempo para nossos testes e correções antes de ser liberado para as partes interessadas.

    As partes interessadas receberam suas janelas de tempo com antecedência, então elas sabiam que deveriam deixar seu fim de semana aberto para testes no início da janela. Eles também seriam informados do fim de sua janela, normalmente na tarde de domingo, onde, se todos não tivessem assinado, teríamos que começar a reverter.

    Ah, e claro... se alguém tivesse uma mudança durante qualquer um dos testes de aceitação e nós fizéssemos uma mudança, isso significava que todas as aprovações da parte interessada seriam anuladas e eles teriam que testar novamente... então tentaríamos dar a eles um tempo para procurar problemas e executar as correções como um lote, em vez de aplicá-los um de cada vez.

    Felizmente, nas únicas vezes em que tive uma dessas situações em que não poderíamos ter um tempo de inatividade significativo, os sistemas que eu estava migrando eram alimentados por scripts, não pela entrada do usuário, então eu poderia apenas ter dois sistemas paralelos funcionando e trocá-los quando as coisas foram assinadas. (apenas uma vez houve um problema, quando meu chefe insistiu que fizéssemos um backup completo, sem entender que a coisa toda ainda estaria online em um IP diferente ... então o que deveria ter sido uma interrupção de 5 minutos em um dia ruim tornou-se uma interrupção de 5 horas.)

    • 14
  2. ik_zelf
    2011-02-26T13:46:09+08:002011-02-26T13:46:09+08:00

    Tudo depende do volume de dados em comparação com a potência do hardware que suporta o banco de dados e os acordos sobre a disponibilidade do sistema. Por acaso você tem algum tempo de inatividade ou tudo deve ser feito online? Comece a limpar os dados, eliminando as linhas desatualizadas o máximo possível. Este é um projeto em si. Se os dados estiverem limpos e valiosos, faça com que o usuário decida sobre o tempo de inatividade. Se o tempo de inatividade estiver disponível, é bastante simples, se for uma transformação conhecida que deve ser aplicada nos dados existentes para formar a coleção atualizada. Se não houver - ou muito pouco - tempo de inatividade permitido, o desafio começa. O Oracle oferece suporte a isso de algumas maneiras, como redefinição de tabela on-line e - novo em 11g - redefinição baseada na edição. Com a redefinição de mesas online pode preparar as mesas para assumirem a sua nova forma. Isso pode ser feito enquanto o aplicativo está sendo executado no formato antigo da(s) tabela(s). Se estiverem todos prontos, você pode mudar para a nova forma da(s) tabela(s). Este será também o momento de introduzir o novo código de aplicação e ao mesmo tempo marca o início do tempo de inatividade necessário para colocar a nova aplicação em funcionamento. Os dados históricos mais antigos podem ser preparados antes da migração dos dados ativos e mantidos em sincronia usando ferramentas como o Oracle Golden Gate. Nesse cenário, você cria efetivamente um novo banco de dados que assume a função do banco de dados antigo. A redefinição baseada em edição é mais adequada se nenhuma alteração na tabela for necessária. Existem inúmeras opções a serem consideradas e acho que é difícil dar uma boa regra que sempre funcione. Este será também o momento de introduzir o novo código de aplicação e ao mesmo tempo marca o início do tempo de inatividade necessário para colocar a nova aplicação em funcionamento. Os dados históricos mais antigos podem ser preparados antes da migração dos dados ativos e mantidos em sincronia usando ferramentas como o Oracle Golden Gate. Nesse cenário, você cria efetivamente um novo banco de dados que assume a função do banco de dados antigo. A redefinição baseada em edição é mais adequada se nenhuma alteração na tabela for necessária. Existem inúmeras opções a serem consideradas e acho que é difícil dar uma boa regra que sempre funcione. Este será também o momento de introduzir o novo código de aplicação e ao mesmo tempo marca o início do tempo de inatividade necessário para colocar a nova aplicação em funcionamento. Os dados históricos mais antigos podem ser preparados antes da migração dos dados ativos e mantidos em sincronia usando ferramentas como o Oracle Golden Gate. Nesse cenário, você cria efetivamente um novo banco de dados que assume a função do banco de dados antigo. A redefinição baseada em edição é mais adequada se nenhuma alteração na tabela for necessária. Existem inúmeras opções a serem consideradas e acho que é difícil dar uma boa regra que sempre funcione. Os dados históricos mais antigos podem ser preparados antes da migração dos dados ativos e mantidos em sincronia usando ferramentas como o Oracle Golden Gate. Nesse cenário, você cria efetivamente um novo banco de dados que assume a função do banco de dados antigo. A redefinição baseada em edição é mais adequada se nenhuma alteração na tabela for necessária. Existem inúmeras opções a serem consideradas e acho que é difícil dar uma boa regra que sempre funcione. Os dados históricos mais antigos podem ser preparados antes da migração dos dados ativos e mantidos em sincronia usando ferramentas como o Oracle Golden Gate. Nesse cenário, você cria efetivamente um novo banco de dados que assume a função do banco de dados antigo. A redefinição baseada em edição é mais adequada se nenhuma alteração na tabela for necessária. Existem inúmeras opções a serem consideradas e acho que é difícil dar uma boa regra que sempre funcione.

    É um assunto interessante, Ronald.

    • 6
  3. D. Lambert
    2011-03-01T08:26:38+08:002011-03-01T08:26:38+08:00

    Boas respostas até agora. Vou adicionar mais alguns pontos para consideração.

    Primeiro, quando você pode fazer suas migrações com SQL DML simples, pode confiar amplamente em seu mecanismo SQL para garantir que todas as linhas sejam processadas com êxito. Eu estive envolvido em migrações, porém, onde algumas das migrações foram um pouco mais complicadas -- houve transformações de dados reais quando os dados foram movidos para uma nova estrutura. Nesses casos, é importante que você tenha um processo que dê conta dos seguintes itens:

    • Contagem de registros vs. registros processados.
    • Detecte erros durante a transformação e lide com eles de uma forma que permita a continuação da transformação e permita o reprocessamento dos registros "ruins" depois de identificar uma correção.
    • As contagens de registros devem incluir registros "ruins" - ou seja, registros de entrada = registros de saída bons + registros ruins
    • Se sua transformação alterar as contagens de registros (um registro de entrada se torna mais de um registro de saída, por exemplo), tenha uma maneira de prever o número de registros de saída com os quais você terminará e, em seguida, teste seus resultados em relação a essa contagem.

    O outro ponto que eu acrescentaria é que é importante ter um plano para o que você fará se/quando as coisas não saírem como planejado. Essa é realmente uma função da implantação como um todo, mas parece ser minimizada com frequência suficiente para que eu achasse que valia a pena mencioná-la.

    • 5
  4. gbn
    2011-02-27T03:08:11+08:002011-02-27T03:08:11+08:00

    Uma visão geral de como fazer

    Começar com

    • Você tem o banco de dados "after" em test/UAT/whatever "working DB"
    • Você tem o banco de dados "antes" em produção. Portanto, use-o para criar uma cópia de produção em algum lugar = "BD de referência". E outro como "script de teste DB"
    • Também espero que você tenha um monte de scripts de desenvolvimento com seus ALTERs etc. Se sim, outra cópia de produção com seu script de desenvolvimento aplicado, de forma limpa e em ordem é útil = "change DB"

    Em seguida, baixe o Red Gate Compare tools ou algo como Embarcadero SQL Change manager . Você não pode migrar facilmente sem ele. O custo é insignificante em relação ao tempo economizado. E o mais importante, os scripts gerados fazem alterações em uma única transação, o que significa uma implantação limpa

    Agora,

    • gerar scripts de mudança e reversão usando as ferramentas de comparação entre a "referência" e a "mudança"
    • aplique o script de alteração para "teste de script" e compare novamente com "banco de dados de trabalho"
    • aplique o script de reversão para "teste de script" e compare novamente com " e compare novamente com "BD de trabalho"

    Agora, você tem scripts de alteração e reversão testados e seguros para aplicar a qualquer momento.

    E é claro que você faz backup do banco de dados antes de qualquer alteração porque, estatisticamente, a merda sempre acontecerá eventualmente.

    As ferramentas do Red Gate também podem ser comparadas com uma pasta que está sob controle de origem. Em seguida, capturamos os ALTERs etc em nosso controle de origem separadamente para os scripts de alteração reais.

    • 4

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve