Os bancos de dados do SQL Server ocasionalmente entram no modo “Em Recuperação”, o que pode surpreender os administradores de banco de dados. 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 normalmente automático, ele pode levar mais tempo do que o esperado — ou até parecer travado — deixando os administradores incertos sobre como proceder.
Se você 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 visão rápida 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 nos bastidores.
- As 3 Fases da Recuperação — Uma explicação clara das fases de Análise, Redo e Undo que o SQL Server segue durante a recuperação.
- Causas Comuns de Atrasos — Desde logs de transação grandes até arquivos de log virtual excessivos (VLFs), veja o que pode estar retardando o processo.
- Como Voltar ao Online — Aprenda etapas práticas para restaurar seu banco de dados a um estado consistente, desde esperar até usar ferramentas de reparo do SQL.
- Quando Buscar Ajuda Avançada — O que fazer se o processo de recuperação parecer travado e não houver progresso.
No final deste guia, você terá uma compreensão sólida do processo de recuperação do SQL Server e das ferramentas que pode usar para colocar seu banco de dados online o mais rápido possível.
Entendendo o Modo “Em Recuperação” no SQL Server
Quando o SQL Server é reiniciado ou um banco de dados é restaurado a partir de um backup, ele entra no modo ‘Em Recuperação’ para manter a integridade dos dados. Durante essa fase, o SQL Server reproduz ou desfaz transações incompletas para prevenir a corrupção de dados e garantir a consistência transacional.
Após reiniciar o SQL Server, o banco de dados entra no modo “Em Recuperação”. Você também pode ver o banco de dados do SQL Server no estado de recuperação em sua inicialização ou ao restaurá-lo a partir de um backup.
Figura 1 – Banco de Dados SQL no Modo “Em Recuperação”
O estado de “recuperação” do banco de dados significa que o banco de dados está executando um processo de recuperação e automaticamente ficará online assim que o processo for concluído. No entanto, você pode perceber que a recuperação está lenta e que 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 banco de dados SQL passam por três fases de recuperação, o que pode levar tempo dependendo do tamanho de seus arquivos de banco de dados.
As 3 Fases de Recuperação de Banco de Dados SQL
Geralmente, quando o banco de dados não é desligado corretamente ao reiniciar o SQL Server, ele passa por uma recuperação de falha, garantindo que o banco de dados permaneça consistente. Existem três fases de recuperação pelas quais um banco de dados SQL precisa passar:
Fase 1: Análise
Essa fase começa a partir do “último ponto de verificação até o final do log de transações.” Ela cria uma tabela ‘Dirty Page Table’ (DPT) que ajuda a determinar todas as páginas sujas no momento do travamento. 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 avança com todas as alterações que ocorreram após o ponto de verificação e antes do travamento. 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 avançadas.
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 a um estado consistente.
O que Fazer se 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'
Isto significa que os arquivos do BD estão abertos, e o processo de recuperação foi iniciado. Mais tarde, você deve ver o SQL Server passando por 3 fases de recuperação. Se estiver procurando orientação sobre como fazer backup e restaurar seu banco de dados, confira este guia sobre fazendo backup e restaurando Bancos de Dados SQL do Azure.
Abaixo é mostrada a Fase 1 da recuperação do banco de dados:
Recovery of database ‘DatabaseName’ (9) is 0% complete (approximately 95 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Recovery of database ‘DatabaseName’ (9) is 3% complete (approximately 90 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Após a conclusão da fase 1, o SQL Server passará pelas fases 2 e 3 de recuperação:
Recovery of database ‘DatabaseName’ (9) is 5% complete (approximately 85 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required…
Recovery of database ‘DatabaseName’ (9) is 95% complete (approximately 40 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.
Phase 3 of 3. This is an informational message only. No user action is required.
Assim que as Fases 2 e 3 forem concluídas, você verá algo semelhante a:
3807 transactions rolled forward in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
0 transactions rolled back in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery is writing a checkpoint in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery completed for database DatabaseName (database ID 9) in 30 second(s) (analysis 1289 ms, redo 29343 ms, undo 72 ms.) This is an informational message only. No user action is required.
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.
Motivos pelos quais o Banco de Dados SQL Fica Preso no Modo “Em Recuperação”
A seguir estão os motivos que podem fazer com que um banco de dados SQL fique preso no modo de recuperação:
- Uma transação em andamento está sendo revertida
- O tamanho do arquivo de log de transações é enorme
- Muitos Arquivos de Log Virtuais (VLFs) estão dentro do log de transações do BD
- Houve um erro no SQL Server, que agora foi corrigido.
O Que Você Pode Fazer para Trazer o Banco de Dados de Volta a um Estado Consistente?
Alternativa 1: Aguarde a Recuperação do Banco de Dados ser Concluída
A solução mais óbvia para trazer o banco de dados de volta online é ser paciente e aguardar a conclusão do processo de recuperação; isso pode levar horas ou dias. Se a recuperação estiver levando mais tempo do que o esperado para um BD em um SQL Server 2008 ou 2008 R2, aplicar correções da Microsoft pode ajudar.
Nota: Evite executar o comando RESTORE para trazer o DB online em um estado consistente, pois o SQL Server já está tentando realizar a mesma tarefa. E, executar ‘RESTORE with..Recovery’ significa fazer com que o DB passe 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 para um estado consistente, usar uma ferramenta especializada de reparo SQL pode ajudar a restaurar o DB 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 banco de dados do SQL Server que foram excluídos, truncados ou corrompidos.
- dbForge SQL Complete — Embora seja principalmente uma extensão IDE, oferece recursos úteis de tratamento 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 está preso no modo ‘Em Recuperação’, as três fases críticas da recuperação (Análise, Reexecução e Desfazer) e o que você pode fazer para trazer o banco de dados de volta online. Também discutimos possíveis causas, desde logs de transação grandes até muitos arquivos de log virtuais (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 onde 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 SQL.
Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode