Ooops! Você executou um comando de UPDATE sem uma condição WHERE em uma base de dados e isso modificou muitos registros com dados ruins. Como você recupera os dados corretos novamente?
Se você gerou um backup antes de executar a modificação da tabela, você pode facilmente recuperar os dados. As soluções mais comuns são:
- Restaurar o backup da base da de dados e usá-lo ao invés da base original
- Em casos de outras alterações terem sido feitas após o UPDATE você não pode deixar a base off-line, logo:
- Restaure o backup da base de dados em um servidor de teste
- Use o assistente do SQL Server Management Studio Export data para exportar os dados
- Importe os dados exportados para dentro da base de dados original
Mas, se você não possui um backup FULL, o UPDATE ainda pode ser desfeito usando as informações da transação armazenadas no transaction log.
O transaction log mantém as informações sobre as transações feitas em sua base de dados. Se ela não for truncada ou encolhida, você pode usar o ApexSQL Log
ApexSQL Log é uma ferramenta em que você pode minerar o transaction log do banco de dados e recuperar um UPDATE acidental. Logo, ao invés de ter todo o dado atualizado na tabela, você pode reverter o UPDATE e atualizar apenas os dados que preencham a um certo critério
Para recuperar os dados de um UPDATE acidental usando o ApexSQL Log:
- Inicie o ApexSQL Log
-
Conecte-se ao banco de dados
-
Use a seleção de Date/time range no passo Filter setup para restringir o momento em que o UPDATE foi executado
-
Em Operations tab selecione Update row
-
Em Tables, selecione a(s) tabela(s) onde o dado foi atualizado
- Se possível, use os filtros de Users e Applications para filtrar o resultado
- Clique em Open
-
Para criar um script de desfazer:
- Clique em Create undo script na guia Home dentro do grupo Actions para criar o script de Desfazer para todas as transações exibidas na grade
- Selecione as transações que você quer criar o script, clique com o botão direito na grade principal e clique em Create undo script no menu de contexto para criar o script apenas para as transações selecionadas
- Execute o script na base de dados
Após o script ser executado, os UPDATES serão desfeitos e o dado original estará de volta a base de dados
Se você involuntariamente ATUALIZOU os registros da base de dados e não possui um backup FULL da base de dados, ainda existe esta chance de recuperar os dados usando o ApexSQL Log
Tradução: Ricardo Leka Roveri
September 2, 2015