Às vezes, as pessoas fazem inserções, atualizações ou exclusões que não pretendiam e desejam reverter suas alterações (ou desfazê-las). Existem bancos de dados que tornam isso fácil de fazer (ou seja, existem bancos de dados que rastreiam cada inserção, atualização, exclusão já feita para que você possa recriar todo o banco de dados até um determinado momento)?
relate perguntas
-
Como configurar transações de leitura para nunca causar falha em outras transações de serialização de gravação
-
Depois de executar esta consulta com sucesso, como volto ao estágio anterior no MySQL?
-
Revertendo alterações de banco de dados após casos de borda de implantação
-
Se eu emitir uma reversão quando o modo de recuperação for registrado em massa, minhas operações em massa serão revertidas?
-
As IOTs geram significativamente mais desfazer por bloco para exclusões?
Não conheço nenhum sistema de banco de dados que ofereça isso pronto para uso - para um conjunto específico de alterações. Fazer isso seria extremamente difícil, pois várias alterações podem ser combinadas em alterações anteriores ou no estado dos dados como resultado de alterações anteriores, em diferentes pontos no tempo, em várias tabelas. Portanto, não é tão simples quanto desfazer a lista linear de alterações em uma única tabela, o que, de outra forma, quebraria os princípios ACID de um sistema de banco de dados. Mas, a recuperação pontual é possível, para restaurar consistentemente o banco de dados como um todo, para um estado anterior em um determinado momento (discutido mais no final desta resposta).
Alguns sistemas de banco de dados oferecem formas de rastreamento de alterações para fins de auditoria de dados. Por exemplo, o Microsoft SQL Server possui os recursos Change Tracking , Change Data Capture e Temporal Tables que acompanham as alterações de dados em tabelas suplementares, com informações como os valores antigos e os timestamps de quando a alteração ocorreu. Isso é para reconciliação manual e auditoria, mas não uma ferramenta para desfazer completamente o estado do banco de dados na totalidade, para um determinado ponto anterior no tempo.
O mais próximo disso seria usar backups granulares, como os backups de log de transações que o SQL Server oferece, que restaurará o banco de dados para um determinado ponto no tempo, mas não desfará um conjunto específico de alterações apenas em determinadas tabelas. É uma restauração completamente consistente do banco de dados, em sua totalidade, para um ponto específico no tempo.
É para isso que servem as Transações .
Você inicia uma transação, faz algumas alterações, decide que não as deseja mais e reverte para o início dessa transação, descartando essas alterações.
Dependendo do seu DBMS, ninguém mais terá a menor ideia de que isso aconteceu.
Nosso uso mais comum para isso é nos proteger contra o "Momento Oops":
Sim. Quase todos eles.
O que você está descrevendo é geralmente chamado de " Recuperação Point in Time " e é uma ferramenta absolutamente essencial para o DBA.
Para executar uma recuperação pontual, restaure um backup [completo] anterior e, em seguida, "roll-forward" [backups provisórios e] logs de transações para voltar ao ponto no tempo necessário.
Parece ótimo , não é?
Agora, a pergunta de $ 64.000:
Porque, paradoxalmente, esse processo de "recuperação pontual" é destrutivo .
Diga que "algo ruim(TM)" acontece às 12 horas.
Alguma parte do banco de dados está quebrada e algumas coisas param de funcionar. Pode levar cerca de uma hora antes que a palavra chegue até você e você tenha que "consertar" o banco de dados.
Durante essa hora, muitas outras coisas aconteceram no banco de dados que "Something Bad(TM)" não quebrou. Todas essas outras alterações serão destruídas por este processo de recuperação.
Por que?
Porque recuperar um banco de dados não é como entrar em seu Delorean e voar de volta para 1955 (embora o "Flashback Query" do Oracle Database ofereça algo muito parecido com isso).
Depois de recuperado, seu banco de dados ficará como estava "em 1955", sem saber nada do que aconteceu desde então. Todo aquele trabalho adorável que as pessoas fizeram desde o meio-dia até o início da recuperação terá desaparecido .
A única maneira de contornar isso é recuperar uma cópia do banco de dados, extrair os dados "quebrados" como estavam antes de "Something Bad(TM)" acontecer e, em seguida, descobrir como "calçar" esses dados de volta ao banco de dados original , substituindo os dados quebrados. Isso pode ser muito, muito doloroso e demorado e, na verdade, causar mais problemas à medida que resolve.