Como corrigir um banco de dados SQL preso no modo de recuperação

As bases de dados do SQL Server ocasionalmente entram em modo “Em Recuperação”, o que muitas vezes pega os administradores de banco de dados de surpresa. Esse status ocorre durante uma reinicialização, restauração de banco de dados ou desligamento inesperado, enquanto o SQL Server reproduz ou desfaz transações incompletas para manter a integridade dos dados. Embora esse processo seja tipicamente automático, às vezes pode demorar mais do que o esperado — ou até parecer travado — deixando os administradores inseguros sobre como proceder.

Se você já encontrou esse problema, não se preocupe. Este artigo ajudará você a entender o que está acontecendo nos bastidores e ensinará como responder. Aqui está uma rápida visão do que você aprenderá:

  • O Que Significa o Modo “Em Recuperação” — Por que seu banco de dados entra nesse estado e o que o SQL Server está fazendo em segundo plano.
  • As 3 Fases da Recuperação — Uma clara explicação das fases de Análise, Refazer e Desfazer que o SQL Server segue durante a recuperação.
  • Causas Comuns de Atrasos — Desde grandes logs de transações até excesso de arquivos de log virtual (VLFs), veja o que pode estar retardando o processo.
  • Como Voltar Online — Aprenda passos práticos para restaurar seu banco de dados a um estado consistente, seja aguardando ou usando ferramentas de reparo do SQL.
  • Quando Procurar Ajuda Avançada — O que fazer se o processo de recuperação parecer travado e nenhum progresso estiver sendo feito.

Ao final deste guia, você terá um sólido entendimento do processo de recuperação do SQL Server e das ferramentas que você pode usar para colocar seu banco de dados online o mais rápido possível.

Compreendendo o Modo “Em Recuperação” no SQL Server

Quando o SQL Server reinicia ou um banco de dados é restaurado a partir do backup, ele entra no modo ‘Em Recuperação’ para manter a integridade dos dados. Durante essa fase, o SQL Server replica ou desfaz transações incompletas para evitar a corrupção de dados e garantir consistência transacional.

Após reiniciar o SQL Server, o banco de dados passa para o modo “Em Recuperação”. Você também pode ver o banco de dados do SQL Server no estado de recuperação durante a inicialização ou ao restaurá-lo a partir do backup.

Figura 1- Banco de Dados SQL no Modo “Em Recuperação”

O estado “recuperando” do banco de dados significa que o banco de dados está realizando um processo de recuperação e automaticamente ficará online assim que o processo estiver completo. No entanto, você pode perceber que a recuperação está lenta e o banco de dados está preso em um estado de recuperação. Seu banco de dados ainda pode estar em estado de recuperação, já que os bancos de dados SQL passam por três fases de recuperação, o que pode levar tempo dependendo do tamanho dos arquivos do seu banco de dados.

As 3 Fases da Recuperação do Banco de Dados SQL

Normalmente, quando o banco de dados não é desligado corretamente no reinício do SQL Server, ele passa por uma recuperação de falhas, garantindo que o BD permaneça consistente. Existem três fases de recuperação pelas quais um BD SQL precisa passar:

Fase 1: Análise

Esta fase começa a partir do “último ponto de verificação até o final do log de transações”. Ele cria uma tabela ‘Dirty Page Table’ (DPT) que ajuda a determinar todas as páginas sujas no momento da falha. Além disso, cria uma tabela ‘Active Transaction Table’ (ATT) para identificar transações não confirmadas quando o SQL Server parou.

Fase 2: Refazer

Nesta fase, o SQL Server refaz todas as alterações que ocorreram após o ponto de verificação e antes da falha. Essencialmente, na fase de refazer, todas as transações que foram confirmadas, mas ainda não foram gravadas no arquivo de dados SQL (.mdf/.ldf) via ponto de verificação, precisam ser refazidas.

Fase 3: Desfazer

Se houver transações não confirmadas no momento da recuperação do banco de dados, elas devem ser desfeitas na fase de desfazer para trazer o BD para um estado consistente.

O que fazer se o seu banco de dados estiver preso no modo de recuperação?

Verifique o Log de erros do SQL Server para ver a primeira mensagem no banco de dados que pode ser semelhante a:

Iniciando o banco de dados 'NomeDoBancoDeDados'

Isso significa que os arquivos do BD estão abertos e o processo de recuperação foi iniciado. Algum tempo depois, você deverá ver o SQL Server passando por 3 fases de recuperação. Se você está procurando orientação sobre como fazer backup e restaurar seu banco de dados, confira este guia sobre como fazer backup e restaurar bancos de dados do Azure SQL.

A fase 1 de recuperação do banco de dados é mostrada abaixo:

Plain Text

 

Após a conclusão da fase 1, o SQL Server passará pelas fases 2 e 3 de recuperação:

Plain Text

 

Assim que as Fases 2 e 3 forem concluídas, você verá algo semelhante a:

Plain Text

 

No log de erros, preste atenção à mensagem ‘nenhuma ação do usuário é necessária’. Isso indica que o banco de dados está em estado de recuperação. No entanto, a recuperação pode levar mais tempo do que o esperado e o banco de dados ficará preso no modo de recuperação.

Razões por Trás do Banco de Dados SQL Preso no Modo “Em Recuperação”

As seguintes são as razões que podem causar um banco de dados SQL preso no modo de recuperação:

  • Uma transação de longa duração está sendo revertida
  • O tamanho do arquivo de log de transações é enorme
  • Há muitos Arquivos de Log Virtual (VLFs) dentro do log de transações do BD
  • Havia um bug no SQL Server, que agora foi corrigido.

O Que Você Pode Fazer Para Tornar o Banco de Dados Consistente Novamente?

Solução Alternativa 1: Aguarde a Recuperação do Banco de Dados Ser Concluída

A solução mais óbvia para colocar o banco de dados online novamente é ter paciência e aguardar a conclusão do processo de recuperação; isso pode levar horas ou dias. Se a recuperação estiver demorando mais do que o esperado para um BD em um SQL Server 2008 ou 2008 R2, a aplicação de correções da Microsoft pode ajudar.

Nota: Evite executar o comando RESTORE para trazer o banco de dados online em um estado consistente, pois o SQL Server já está tentando realizar a mesma tarefa. E, executar ‘RESTORE with..Recovery’ significa fazer o banco de dados passar pelos mesmos passos novamente.

Solução alternativa 2: Use uma ferramenta profissional de reparo de banco de dados SQL

Se a recuperação for concluída, mas não conseguir trazer o banco de dados a um estado consistente, usar uma ferramenta especializada de reparo SQL pode ajudar a restaurar o banco de dados ao seu estado original.

  • Stellar Repair for MS SQL — Uma ferramenta especializada que ajuda a restaurar bancos de dados SQL ao seu estado original após corrupção ou falha.
  • ApexSQL Recover — Esta ferramenta ajuda a recuperar dados de bancos de dados do SQL Server que foram excluídos, truncados ou corrompidos.
  • dbForge SQL Complete — Embora seja principalmente uma extensão de IDE, oferece recursos úteis de manuseio de erros e solução de problemas.
  • Redgate SQL Data Recovery — A Redgate oferece uma variedade de ferramentas para SQL Server, incluindo recursos de recuperação de dados.
  • SysTools SQL Recovery Tool — Conhecida por recuperar arquivos de banco de dados SQL corrompidos ou danificados (.MDF e .NDF) e trazê-los de volta a um estado utilizável.
  • Kernel for SQL Database Recovery — Esta ferramenta pode recuperar e restaurar bancos de dados do SQL Server tanto de corrupção quanto de desligamentos inesperados.
  • Aryson SQL Database Recovery — Outra ferramenta que pode reparar e restaurar arquivos MDF e NDF no SQL Server.

Conclusão

Neste artigo, abordamos o que significa quando um banco de dados SQL fica preso no modo ‘Em recuperação’, as três fases críticas da recuperação (Análise, Refazer e Desfazer) e o que você pode fazer para colocar o banco de dados de volta online. Também discutimos possíveis causas, desde grandes logs de transações até muitos arquivos de log virtual (VLFs). 

Se o seu banco de dados SQL ainda estiver preso no modo de recuperação, lembre-se de que a paciência é fundamental. Evite executar um comando RESTORE, pois isso reinicia o processo de recuperação. Para problemas graves em que a intervenção manual falha, considere usar uma ferramenta profissional de reparo de banco de dados SQL para restaurar seus dados. 

Se você achou este guia útil, compartilhe-o com sua equipe ou deixe um comentário com suas experiências de recuperação do SQL.

Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode