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 / 45956
Accepted
Tulains Córdova
Tulains Córdova
Asked: 2013-07-09 08:52:40 +0800 CST2013-07-09 08:52:40 +0800 CST 2013-07-09 08:52:40 +0800 CST

Como migrar dados entre bancos de dados "todos substitutos"?

  • 772

Com alguma periodicidade, isso precisa ser feito:

  • Inserção de dados de um banco de dados de produção em um banco de dados de teste/desenvolvimento, para que os programadores tenham novos dados para testar.
  • Migrar dados de um banco de dados para outro, por qualquer motivo.

Nota: os bancos de dados são relacionais.

O problema é:

  • Os bancos de dados foram modelados com uma política "all-PK-are-surrogate".
  • Mover dados de um banco de dados para outro envolve programação para evitar a colisão de valores de PK (gerados por sequências).
  • Uma tabela pareando os valores das PKs das tabelas do banco de dados de origem e destino é necessária para fazer a "equivalência" entre as chaves substitutas.
  • A referida tabela deve ser criada antes da migração, combinando chaves de negócios (que não são PK, portanto, não controlam FKs)
  • A migração de dados mesmo de uma única tabela não é trivial, ao contrário de tabelas com chaves naturais.

Qual é a maneira mais fácil de copiar linhas de um banco de dados para outro quando todas as tabelas têm chaves substitutas?

migration
  • 2 2 respostas
  • 617 Views

2 respostas

  • Voted
  1. Best Answer
    waxwing
    2013-07-09T09:54:49+08:002013-07-09T09:54:49+08:00

    Nos deparamos com esse problema (ou pelo menos semelhante) há pouco tempo no trabalho, e nossa solução é dividir o processo de migração em etapas:

    • Insira os novos dados em uma(s) tabela(s) temporária(s) de preparação
    • Atualize as chaves substitutas na(s) tabela(s) de preparação para que não haja conflitos
    • Insira os dados na(s) tabela(s) de destino
    • Excluir a(s) tabela(s) de preparação

    A segunda parte é a complicada, mas no nosso caso conseguimos seguir este algoritmo para cada tabela:

    • Se houver alguma chave estrangeira nesta tabela, configure as chaves estrangeiras na tabela de preparação com ON UPDATE CASCADE
    • Atualize as chaves primárias de todas as linhas para um novo intervalo de id. Usamos ids negativos. Por exemplo, UPDATE STAGINGTABLE SET ID=-ID-1; Agora não há risco de conflitos de id na próxima etapa.
    • Agora, para cada linha em STAGINGTABLE, gere e atribua um novo id

    Repita para cada tabela de preparação. Quando todas as tabelas de preparação forem processadas, INSIRA os dados nas tabelas de destino.

    Uma suposição em que isso se baseia é que todos os dados são novos e independentes dos dados já existentes no banco de dados.

    • 7
  2. HLGEM
    2013-07-09T10:34:51+08:002013-07-09T10:34:51+08:00

    Abordagem alternativa se você não precisar disfarçar os dados por motivos de privacidade. Todas as alterações de banco de dados e valores para tabelas de pesquisa devem estar no controle de origem. Simplesmente restauramos o último backup de prod e, em seguida, usamos scripts de controle de origem para adicionar quaisquer alterações de desenvolvimento que ainda não tenham sido feitas no Prod. Se você tiver vários bancos de dados, todos devem ser atualizados ao mesmo tempo. Uma vantagem disso é que você tem aproximadamente o mesmo número de registros que prod, o que faz uma grande diferença ao testar o desempenho do código do banco de dados. Ele também ajuda a manter seus desenvolvedores usando o controle de origem para alterações e ajuda a praticar implantações antes de movê-los para outros ambientes.

    • -1

relate perguntas

  • Migração de banco de dados grande

  • Nova instância SQL e migração

  • Importe arquivos CSV de 2 colunas para algum tipo de banco de dados .... planejamento preliminar

  • SQL Server 2008 R2 Ent trial expirou mover para expressar?

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

Sidebar

Stats

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

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

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

    • 4 respostas
  • Marko Smith

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

    • 10 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
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +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

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