Dépannage de l'erreur 3313, 3314, 3414 ou 3456 (SQL Server)

Une erreur pendant une opération d'annulation, de restauration par progression ou de récupération sur une base de données SQL Server place la base de données dans l'état SUSPECT. De telles erreurs incluent 3313 (erreur de la phase de restauration par progression du journal), 3314 (erreur d'annulation du journal), 3414 (erreur de récupération qui empêche le redémarrage de base de données) et erreur 3456 (erreur de la phase de restauration par progression sur une transaction enregistrée).

Explication

Une erreur de phase de restauration par progression, d'annulation ou de récupération place la base de données dans l'état SUSPECT parce que le groupe de fichiers primaire, et éventuellement d'autres groupes de fichiers, sont suspects et peuvent être endommagés. La base de données n'est pas disponible et une action est requise de la part de l'utilisateur pour résoudre le problème.

Notes

Si cette erreur se produit pour tempdb, l'instance SQL Server s'arrête.

Action de l'utilisateur

Une erreur de phase de restauration par progression, d'annulation ou de récupération peut être provoquée par une condition transitoire ou par un échec permanent qui se produit chaque fois que vous essayez de démarrer la base de données.

Pour plus d'informations sur la cause d'une occurrence donnée de l'erreur 3313, 3314, 3414 ou 3456, examinez le journal des événements Windows pour rechercher une erreur précédente qui indique l'échec spécifique. Les actions utilisateur appropriées varient selon que les informations dans le Journal des événements Windows indiquent que l'erreur SQL Server a été provoquée par une condition transitoire ou un échec permanent.

Notes

Lorsque l'une de ces conditions d'erreur est rencontrée, SQL Server génère généralement trois fichiers dans le dossier SQL ServerLOG. Le fichier SQLDumpnnnn.txt contient des informations de diagnostic avancées concernant les échecs, notamment des détails relatifs à la transaction et la page qui a rencontré le problème. Ces informations sont généralement utilisées par l'équipe du Support technique pour analyser la raison de l'échec.

Pour une situation temporaire :

  1. Essayez de mettre la base de données en ligne en exécutant l'instruction ALTER DATABASETransact-SQL suivante :

    ALTER DATABASE <database name> SET ONLINE;
    
  2. Pour déterminer si la récupération s'est correctement terminée et si la base de données a été mise en ligne, consultez les journaux des erreurs SQL Server et l'affichage catalogue sys.databases.

  3. Si la base de données est en ligne, exécutez l'instruction DBCC CHECKDBTransact-SQL pour vérifier si la base de données est cohérente.

Pour un échec permanent :

Recherchez l'erreur que vous voulez résoudre (3313, 3314, 3414 ou 3356) dans le journal des erreurs SQL Server et examinez les messages qui la précèdent pour déterminer si vous pouvez la corriger manuellement. Si vous pouvez corriger les erreurs antérieures, effectuez l'une des procédures suivantes :

  • Restaurez et vérifiez la base de données (procédure recommandée), comme suit :

    1. Essayez d'effectuer une sauvegarde de fichier journal après défaillance.

    2. Restaurez la base de données à partir d'une sauvegarde de base de données complète, éventuellement suivie d'une sauvegarde de base de données différentielle, à l'aide de l'instruction RESTORE …WITH NORECOVERY Transact-SQL.

    3. Si la base de données utilise le mode de récupération complète, appliquez toutes les sauvegardes du journal des transactions effectuées après la sauvegarde complète, ou différentielle, de la restauration jusqu'au point de défaillance, à l'aide de RESTORE LOG … WITH NORECOVERY.

    4. Après avoir restauré la base de données aussi près que possible du point de défaillance, récupérez la base de données en utilisant RESTORE DATABASE <nom_base_de_données> WITH RECOVERY.

    5. Une fois la base de données mise en ligne, exécutez l'instruction DBCC CHECKDBTransact-SQL pour vérifier si la base de données est cohérente.

  • Essayez de mettre la base de données en ligne en suivant la procédure décrite pour l'échec temporaire, précédemment dans cette section.

  • Utilisez le mode urgence, comme suit :

    1. Faites passer la base de données dans l'état EMERGENCY en exécutant l'instruction ALTER DATABASETransact-SQL suivante :

      ALTER DATABASE <database_name> SET EMERGENCY; 
      
    2. Examinez la sortie de l'instruction ALTER DATABASE et du journal des erreurs SQL Server.

    3. Examinez l'état de la base de données dans l'affichage catalogue sys.databases.

    4. Effectuez une vérification de cohérence sur la base de données à l'aide de l'instruction DBCC CHECKDB pour comprendre la nature et l'étendue des dommages.

    5. Après avoir évalué la sortie de DBCC CHECKDB, vous pouvez choisir d'exécuter DBCC CHECKDB avec l'option REPAIR_ALLOW_DATA_LOSS.

      AttentionAttention

      Avant d'utiliser cette option, examinez attentivement les informations relatives à la résolution des erreurs en mode urgence dans la base de données, disponibles dans la rubrique DBCC CHECKDB (Transact-SQL) de la documentation en ligne de SQL Server.

Notes

Pour plus d'informations sur les actions possibles en cas de problèmes matériels en rapport avec l'erreur 3313, 3314, 3414 ou 3356, consultez MSSQLSERVER_824.

Étapes permettant d'éviter cette erreur

Pour éviter de rencontrer à nouveau cette situation, procédez comme suit :

  1. Examinez le journal des erreurs SQL Server et les journaux des événements Windows pour tous les problèmes au niveau du système qui peuvent contribuer à cette erreur.

  2. Pour éliminer tout problème connu dans le produit qui mène à cette situation, appliquez la mise à jour cumulative la plus récente pour votre version de SQL Server.