Partilhar via


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çãoObservaçã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çãoObservaçã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:

  1. Tente colocar o banco de dados online executando a instrução Transact-SQLALTER DATABASE a seguir:

    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, examine 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 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:

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

    2. 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.

    3. 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.

    4. 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.

    5. 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:

    1. 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; 
      
    2. Examine a saída da instrução ALTER DATABASE e do log de erros do SQL Server.

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

    4. 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.

    5. Depois de avaliar a saída de DBCC CHECKDB, você pode escolher executar DBCC CHECKDB com a opção 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, faça o seguinte:

  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 o erro.

  2. 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.