Solucionando problemas de erro 3313, 3314, 3414 ou 3456 (SQL Server)

Um erro durante uma operação de refazer, desfazer ou de recuperação em um banco de dados do SQL Server coloca o banco de dados no estado SUSPECT. Esses 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).

Explicação

Um erro de refazer, desfazer ou de recuperação coloca o banco de dados no estado SUSPECT porque o grupo de arquivos primário e, possivelmente, outros grupos de arquivos são suspeitos e podem estar danificados. O banco de dados está indisponível e a ação do usuário é necessária para resolver o problema.

ObservaçãoObservação

Se esse erro ocorrer para o tempdb, a instância do SQL Server será desligada.

Ação do usuário

Um erro de refazer, desfazer ou de recuperação pode ser provocado por uma condição transiente ou por uma falha permanente que ocorre toda vez que você tenta iniciar o banco de dados.

Para obter informações sobre a causa de uma determinada ocorrência dos erros 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 adequadas dependem de se as informações no Log de Eventos do Windows indicam se o erro do SQL Server foi provocado por uma condição transiente ou por uma falha permanente.

ObservaçãoObservação

Quando qualquer uma dessas condições de erro for encontrada, normalmente, o SQL Server 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 que encontraram o problema. Estas informações são usadas normalmente pela equipe de Suporte de Produto para analisar a razão para a falha.

Para uma condição transitória:

  1. Tente colocar o banco de dados online executando a seguinte instrução Transact-SQL ALTER DATABASE:

    ALTER DATABASE <database name> SET ONLINE;
    
  2. Para determinar se a recuperação foi concluída com êxito e se o banco de dados está online, verifique o log de erros do SQL Server e a exibição do catálogo sys.databases.

  3. Se o banco de dados estiver online, execute a instrução Transact-SQL DBCC CHECKDB para verificar se o banco de dados está consistente.

Para uma falha permanente:

Consulte o log de erros do SQL Server para localizar o erro que você está solucionando (3313, 3314, 3414 ou 3356) e examine as mensagens anteriores a esse erro 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:

    1. Tente realizar um backup da parte final do log.

    2. Restaure o banco de dados de um backup completo, opcionalmente seguido por um backup de banco de dados diferencial, usando a instrução Transact-SQLRESTORE …WITH NORECOVERY.

    3. Se o banco de dados usar o modelo de recuperação completa, aplique todos os backups de log de transação realizados depois da restauração completa ou diferencial e faça o backup até o ponto de falha por meio de RESTORE LOG … WITH NORECOVERY.

    4. Ao restaurar o banco de dados o mais perto possível do ponto de falha, recupere o banco de dados por meio de RESTORE DATABASE <nome_do_banco de dados> WITH RECOVERY.

    5. Depois que o banco de dados ficar online, execute a instrução Transact-SQLDBCC CHECKDB 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:

    1. Faça a transição do banco de dados para o estado de EMERGENCY executando a seguinte instrução Transact-SQL ALTER DATABASE.

      ALTER DATABASE <database_name> SET EMERGENCY; 
      
    2. Revise a saída da instrução ALTER DATABASE e no Log de erros do SQL Server.

    3. Examine o estado do banco de dados na exibição de catálogo sys.databases.

    4. Execute uma verificação de consistência no banco de dados por meio da instrução DBCC CHECKDB para entender a natureza e a extensão do dano.

    5. Depois de avaliar a saída de DBCC CHECKDB, você pode escolher executar DBCC CHECKDB com opção de REPAIR_ALLOW_DATA_LOSS.

      Observação sobre cuidadosCuidado

      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çãoObservaçã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, proceda da seguinte maneira:

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

  2. Para excluir os problemas conhecidos no produto que possam levar a esta condição, aplique a Atualização Cumulativa mais recente para sua versão do SQL Server.