Eu gerencio um ambiente de banco de dados misto e nossos programadores podem usar algumas boas opções de reversão. Eu estava pensando em usar SQL Compare, Red Gate Source Control e algumas outras ferramentas, mas não consigo descobrir qual seria a melhor maneira de garantir reversões com perda mínima de dados.
Supondo que estamos em casos extremos, como quando uma chave estrangeira é adicionada a outra tabela que é preenchida com dados do cliente, e precisamos reverter as alterações na tabela primária. Quais são algumas das práticas recomendadas padrão do setor para garantir reversões suaves fora de restaurações de log de transações, restaurações de instantâneos, controle de fonte redgate etc. para lidar com esses cenários mais difíceis de recuperar?
Obrigado!
Bem, acho que ter um sistema de teste que suporte a carga de trabalho, os dados e os casos extremos que você tem na produção deve atenuar a necessidade de reversão. Se você puder testar adequadamente a implantação em um sistema semelhante, deverá ter poucos cenários em que precise reverter.
Dito isso, você também pode fazer muitas coisas para tornar suas alterações de código compatíveis com versões anteriores. Escrevi uma série de dicas sobre isso há algum tempo, incluindo uma em que mudo um relacionamento:
http://www.mssqltips.com/sqlservertip/2074/make-your-sql-server-database-changes-backward-compatível-quando-alterar-um-relacionamento/
http://www.mssqltips.com/sqlservertip/2071/make-your-sql-server-database-changes-backward-compatível-quando-renaming-an-entity/
http://www.mssqltips.com/sqlservertip/2050/make-your-sql-server-database-changes-backward-compatível-quando-dropping-a-column/
http://www.mssqltips.com/sqlservertip/2035/make-your-sql-server-database-changes-backward-compatível-quando-adicionar-a-nova-coluna/
Cada aplicativo é diferente, então você não encontrará muitas soluções "padrão da indústria" para isso. Mas você deve ser capaz de reunir bastante bom senso que reduzirá ou eliminará sua necessidade de se preocupar com isso.
E não, não estou dizendo que você não deve ter um plano de reversão, mas quando as mudanças são planejadas e testadas adequadamente, o plano de reversão não deve exigir um esforço significativo para ser elaborado e raramente - ou nunca - deve ser usado.