Como recuperar dados de uma atualização acidental sem backups no SQL Server

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:
    1. Restaure o backup da base de dados em um servidor de teste
    2. Use o assistente do SQL Server Management Studio Export data para exportar os dados
    3. 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:

  1. Inicie o ApexSQL Log
  2. Conecte-se ao banco de dados

  3. Use a seleção de Date/time range no passo Filter setup para restringir o momento em que o UPDATE foi executado

  4. Em Operations tab selecione Update row

  5. Em Tables, selecione a(s) tabela(s) onde o dado foi atualizado

  6. Se possível, use os filtros de Users e Applications para filtrar o resultado
  7. Clique em Open
  8. Para criar um script de desfazer:

    1. 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

    2. 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
  9. 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