Recuperar dados SQL excluídos a partir do transaction log

Em Recuperar dados do SQL através do backup ou dos arquivos online da base de dados, nós mostramos dois cenários, o primeiro usando um backup full e o outro através do arquivo online de dados – o arquivo MDF. Além destes, existe mais uma opção que você pode usar quando se trata de recuperar dados SQL – o transaction log

Total a alteração de dados e esquemas em uma base SQL Server é adicionada ao transaction log como um registro. Se as transações excluidas que você quer recuperar estiverem em um transaction log ativo, um transaction log desanexado ou em um backup de transaction log você pode ler e desfazer a exclusão

Se seu banco de dados está em:

  • Modo de recuperação Completo (Full), as operações de exclusão ainda estão em um transaction log on-line ou um backup do log de transações, desde que eles foram criados após a exclusão de registros
  • Modo de recuperação Bulk_logged, as operações de exclusão são totalmente registradas em um transaction log on-line, exceto para os dados BLOB excluídos. Como exclusões BLOB não são registradas no transaction log on-line e as inserções BLOB não foram registrados devido ao modelo de recuperação BULK_LOGGED, sua recuperação não será possível. Para outros tipos de dados, as operações de exclusão estão em um transaction log on-line ou um backup do transaction log criado após a eliminação
  • Modo de recuperação Simples, se houve muitas operações realizadas no banco de dados após a exclusão de registros, as operações de exclusão podem não estar mais no transaction log on-line. Neste caso, o quanto antes você executar um leitor de log de transações online SQL Server contra o banco de dados, maior serão as chances de recuperação

Usando ApexSQL Log

Para ler um transaction log de banco de dados online, transaction log desanexados e backups do transaction log, tanto backup nativo e nativamente comprimido, use o ApexSQL Log. É um leitor de transaction log do SQL Server que pode auditar, reverter e reproduzir alterações de dados e objeto, incluindo aqueles que podem ter ocorrido antes ApexSQL Log ser instalado. Ele também captura as informações sobre o usuário, aplicação e host usado para fazer cada mudança

  1. Inicie o ApexSQL Log
  2. Conecte na base de dados ativa em que os dados foram excluídos

    Connecting to the database in ApexSQL Log

  3. Se qualquer backup de transaction log foi criado após os registros serem excluídos, adicione-os no próximo passo. Note que os backups de transaction log devem formar uma cadeia completa se o que você está tentando recuperar conter dados BLOB (veja abaixo mais detalhes sobre isso)
  4. No caso de haver um arquivo de transaction log desanexado que contenha os registros excluídos (por exemplo, se você colocou a base offline e copiou o arquivo LDF imediatamente após a exclusão), você pode usá-lo também:

    Select log data source file

  5. Use a seleção Time range nas opções de Filter setup para limitar transações para aquelas que ocorreram dentro do momento especificado

    Filtering transactions by time range

  6. Use o filtro Operations para limitar os resultados apenas para os registros excluídos. Para fazer isso desmarque todas as Schema operations (DDL), como também Insert row e Update row na lista Data operations (DML)

    Choosing deleted SQL records only

  7. Se possível, especifique as tabelas de onde os registros foram excluídos. Se não for possível, deixe todas as tabelas de usuários selecionadas

    Specifying the records from which the records have been deleted

  8. Clique em Open
  9. Todas as operações de DELETE são exibidas na grade principal. Tudo que você tem a fazer é selecionar todas elas ou apenas o que você precisa, e clique em Create Undo Script no menu para criar um script para reverter as exclusões

    Create Undo Script in ApexSQL Log

  10. Para criar um script para reverter todos os registros exibidos na grade, clique em Create undo script no menu. Para criar um script de desfazer para apenas alguns dos registros, selecione-os na grade e, no menu de contexto, na grade selecione Create undo script

    O script que insere os registros excluídos será criado

    Generated Undo Script

  11. Para executar o script, clique Run button no menu

Use o ApexSQL Log para criar um script de desfazer imediatamente

O método descrito com os resultados mostrados na grade é aceitável apenas para um pequeno número de registos. Quando se trata de milhões de registros excluídos, é recomendável criar um script de desfazer imediatamente, em vez de mostrar os resultados na grade primeiro. Os passos 1 a 7 são o mesmo que acima

  1. Ao invés de Open results in grid, clique em Export results to a file

    Export results to a file

  2. Selecione Generate rollback (undo) script e especifique o caminho do arquivo e o nome

    Generate Rollback (UNDO) Script

  3. Clique em OK

    O script para desfazer que insere todos os registros apagados de volta em suas tabelas será criado

    Exporting finished

Usando ApexSQL Recover

Esta é outra ferramenta ApexSQL que pode ler transaction logs do SQL Server – um transaction log on-line, transaction log desanexado e backups do log de transações, tanto backups nativos e nativamente comprimido. ApexSQL Recover é uma ferramenta de recuperação para bancos de dados do SQL Server que recupera dados apagados, truncados, corrompidos ou danificados. Ele recupera objetos e dados perdidos devido a operações de DROP e restaura ambos os BLOBs excluídos e on-line como arquivos. O processo de recuperação é bastante semelhante à descrita aqui: Recuperar dados SQL excluídos de um backup ou de arquivos de banco de dados on-line – Use ApexSQL Recover

  1. Inicie o ApexSQL Recover
  2. Selecione Recover lost data due to a DELETE operation
  3. Especifique a instância SQL Server instance, credenciais e base de dados onde os registros foram excluídos
  4. Selecione Several sources are available for the recovery
  5. O transaction log online, todos os backups de transaction log criados para a base de dados selecionada são automaticamente listados. Para adicionar backups de transaction log ou um transaction log desanexado que contém os registros que foram apagados, use o botão Add. Note que os backups de transaction log devem formar uma cadeia completa
  6. Especifique o momento em que o comando de exclusão foi executado. Se você não sabe quando ocorreu selecione Date and time are unknown
  7. Use os filtros de tabela para restringir a recuperação penas para as tabelas específica, se aplicável
  8. Clique em Recover
  9. Um script que insere os dados excluídos é gerado. Verifique e execute.

A boa notícia para a recuperação de registros excluídos é que há uma chance de recuperação bem-sucedida, mesmo sem um backup de banco de dados, ou uma cadeia de backup do transaction log. Note que a recuperação bem sucedida dos dados apagados com BLOBs não é possível sem uma cadeia completa de transaction log. Como a transação de exclusão do BLOB não registra o valor excluído real, é necessário percorrer a sequência de backups do transaction log por todo o caminho até o início da cadeia. Se a corrente é quebrada, a reconstrução pode ficar incorreta. Por exemplo, se as informações sobre uma atualização de dados BLOB está faltando, o BLOB originalmente inserido será recuperado em vez de um excluído

Mesmo com um banco de dados no modelo de recuperação simples, há uma chance de recuperação. No modelo de recuperação simples, novas transações registradas em um transaction log on-line substitui os antigos. Se o transaction log on-line é, por exemplo, 100 GB, e você tem 1 GB de dados de transaction log registrados todos os dias, o transaction log on-line será totalmente sobrescrito em 100 dias. Isso significa que você pode recuperar os dados apagados até 100 dias atrás

Claro, isso não implica que você deve contar com isso e esquecer sobre a sua estratégia de recuperação de desastre do SQL Server

A ApexSQL possui duas ferramentas que podem ajudar com os logs de transação. ApexSQL Log oferece mais opções de filtragem e granularidade de registros recuperados – além de filtragem de tempo e nome da tabela que é uma característica comum para ambas as ferramentas, ele fornece filtragem em tabelas do sistema, registros com base em um determinado valor da coluna, informação do usuário que cometeu a exclusão, e em caso do ApexSQL Log Connection estiver funcionando no momento das operações – pelo nome do aplicativo e host

ApexSQL Recover tem menos opções de filtragem, mas fornece mais opções de saída de recuperação. Além de criar um script T-SQL que insere registros, ele também pode criar um novo banco de dados e recuperar registros excluídos diretamente nele

Tradução: Ricardo Leka Roveri

September 2, 2015