Alteração de BD com sistema em produção

Qual a solução que vcs usam quando precisam alterar a estrutura de uma tabela, e essa operação requer que vc ‘trabalhe’ com os dados contidos nessa tabela?
Por exemplo, se tenho uma tabela que tem o campo ‘endereco_completo’ e na minha nova versão vai ser ‘rua’ e ‘numero’, e preciso que ele separe esse valor por espaço, sendo que o valor que antes na coluna ‘endereco_completo’ era ‘ruazinha 123’ agora na coluna 'rua 'receba ‘ruazinha’ e na coluna ‘numero’ receba ‘123’.
Não sei se fui mt claro, mas espero que tenham entendido e possam me dar alguma sugestão.

1º) Crie as novas estruturas(colunas/tabelas);
2º) Popule as novas estruturas com os valores corretos;
3º) Faça o deploy da sua aplicação utilizando as novas estruturas (queries de banco, mapeamentos etc);
4º) Se não houve nenhum problema/erro nos seus testes com a nova estrutura, destrua as antigas estruturas (colunas/tabelas).

Migração de sistema FOR THE WIN! \m/

Não sei se entendi o ponto exato da dúvida.

Costumo criar scripts de migração incrementais.

No seu caso o script precisaria:

  • Adicionar um campo rua
  • Adicionar um campo numero
  • Atualizar a tabela com a nova informação.

Repare que eu não apago a coluna anterior neste mesmo script.
Esse tipo de alteração destrutiva costumo colocar no próxmo script de atualização, quando a atual estiver ok em produção
(E eu garantir que não perdi nada)

Como nem sempre sou eu que rodo o script no ambiente, na prática eu faço uns testes a mais no script:

  • Se a coluna que estou tentando inserir no banco, já existe, eu a apago.
  • Se a coluna que estou tentando apagar não existe, não faço nada.

Isso garante que se o script for rodado mais de uma vez por engano, não causará problemas.

é um processo cauteloso, pois se você não vai se desfazer da tabela, e sim modificar a sua estrutura, primeiramente crie suas colunas novas, popule as tabelas conforme os dados, e depois elimine as colunas antigas, pois, pelo que eu entendi, você irá continuar usando a tabela atual, não é mesmo?

Exato. Minha preocupação é que, quando fizer o deploy com os novos mapeamentos, o sistema passará a guardar as informações no lugar certo, porém minha alteração vai estar rodando ainda, atualizando os registros pras novas colunas, contanto que teríamos milhões de registros (hipótese)

Você não tem um servidor de homologação?

Aqui temos um que a noite gera um espelho do banco de dados de produção. Assim, quando aplicamos a mudança da nova versão, estamos aplicando em um banco que reflete a realidade de produção.

E lógico, depois de instalar a versão nova no espelho da versão de produção, testamos as novas funcionalidades, e funcionalidades antigas que tenham sofrido algum impacto com as alterações.