Solucionando problemas do erro 3313, 3314, 3414 ou 3456 (SQL Server)
Um erro durante uma operação de refazer, desfazer ou recuperação em um banco de dados do SQL Server coloca o banco de dados no estado SUSPECT. Tais erros incluem 3313 (erro de refazer log), 3314 (erro de desfazer log), 3414 (erro de recuperação que impede a reinicialização do banco de dados) e o erro 3456 (erro de refazer em uma transação registrada em log).
Explicação
Um erro de refazer, desfazer ou recuperação coloca o banco de dados no estado SUSPECT porque o grupo de arquivos primário, e talvez outros grupos de arquivos, sejam suspeitos de estar danificados. O banco de dados está indisponível, e é necessária uma ação do usuário para resolver o problema.
Observação |
---|
Se esse erro ocorrer para tempdb, a instância do SQL Server será desligada. |
Ação do usuário
Um erro de refazer, desfazer ou recuperação pode ser causado por uma condição transitório ou uma falha permanente que ocorre toda sempre que você tenta iniciar o banco de dados.
Observação |
---|
Quando qualquer uma dessas condições de erro é encontrada, o SQL Server normalmente gera três arquivos na pasta LOG do SQL Server. O arquivo SQLDumpnnnn.txt contém informações de diagnóstico avançadas referentes às falhas, inclusive os detalhes sobre a transação e a página em que o problema foi encontrado. Essas informações são normalmente usadas pela equipe de Suporte ao Produto para analisar o motivo da falha. |
Para obter informações sobre a causa de uma determinada ocorrência do erro 3313, 3314, 3414 ou 3456, examine o Log de Eventos do Windows para procurar um erro anterior que indique a falha específica. As ações do usuário apropriadas dependerão do fato de as informações do Log de Eventos do Windows indicarem que o erro do SQL Server foi causado por uma condição transitória ou por uma falha permanente.
Para uma condição transitória:
Tente colocar o banco de dados online executando a instrução Transact-SQLALTER DATABASE a seguir:
ALTER DATABASE <database name> SET ONLINE;
Para determinar se a recuperação foi concluída com êxito e se o banco de dados está online, examine o log de erros do SQL Server e a exibição do catálogo sys.databases.
Se o banco de dados estiver online, execute a instrução DBCC CHECKDBTransact-SQL para verificar se o banco de dados está consistente.
Para uma falha permanente:
Procure no log de erros do SQL Server o erro que você está solucionando (3313, 3314, 3414 ou 3356), e examine as mensagens que o precede para determinar se você pode corrigi-lo manualmente. Se você puder corrigir os erros anteriores, execute um dos procedimentos a seguir:
Restaure e verifique o banco de dados (o procedimento recomendado), como segue:
Tente fazer um backup da parte final do log.
Restaure o banco de dados de um backup completo de banco de dados, opcionalmente seguido de um backup de banco de dados diferencial, usando a instrução Transact-SQLRESTORE …WITH NORECOVERY.
Se o banco de dados usar o modelo de recuperação completa, aplique todos os backups de log de transação realizados após a restauração completa ou diferencial e faça o backup até o ponto de falha usando RESTORE LOG … WITH NORECOVERY.
Ao restaurar o banco de dados o mais perto possível do ponto de falha, recupere o banco de dados usando RESTORE DATABASE <nome_do_banco de dados> WITH RECOVERY.
Depois de o banco de dados ficar online, execute a instrução DBCC CHECKDBTransact-SQL para verificar se o banco de dados está consistente.
Tente fazer o banco de dados ficar online usando as etapas descritas para um erro transitório, anteriormente nesta seção.
Use o modo de emergência, da seguinte maneira:
Faça a transição do banco de dados para o estado EMERGENCY executando a seguinte instrução Transact-SQLALTER DATABASE:
ALTER DATABASE <database_name> SET EMERGENCY;
Examine a saída da instrução ALTER DATABASE e do log de erros do SQL Server.
Examine o estado do banco de dados na exibição do catálogo sys.databases.
Execute um teste de consistência no banco de dados usando a instrução DBCC CHECKDB para entender a natureza e a extensão do dano.
Depois de avaliar a saída de DBCC CHECKDB, você pode escolher executar DBCC CHECKDB com a opção REPAIR_ALLOW_DATA_LOSS.
Cuidado Antes de usar a opção, revise com cuidado as informações sobre como resolver erros no modo de emergência do banco de dados no tópico DBCC CHECKDB (Transact-SQL) dos Manuais Online do SQL Server.
Observação |
---|
Para obter informações sobre como resolver problemas de hardware referentes ao erro 3313, 3314, 3414 ou 3356, consulte MSSQLSERVER_824. |
Etapas para evitar este erro
Para evitar que essa situação ocorra novamente, faça o seguinte:
Revise o log de erros do SQL Server e os logs de eventos do Windows para conhecer os problemas do sistema que possam contribuir para o erro.
Para excluir os problemas conhecidos no produto que possam levar a essa condição, aplique a Atualização Cumulativa mais recente para sua versão do SQL Server.
Consulte também