Comment réparer une base de données SQL bloquée en mode de récupération

Les bases de données SQL Server entrent parfois en mode « En récupération », ce qui peut souvent surprendre les administrateurs de base de données. Ce statut survient lors d’un redémarrage, d’une restauration de base de données ou d’un arrêt inattendu, alors que SQL Server rejoue ou annule les transactions incomplètes pour maintenir l’intégrité des données. Bien que ce processus soit généralement automatique, il peut parfois prendre plus de temps que prévu, voire sembler bloqué, laissant les administrateurs incertains quant à la marche à suivre.

Si vous rencontrez ce problème, ne vous inquiétez pas. Cet article vous aidera à comprendre ce qui se passe en coulisses et vous apprendra comment réagir. Voici un aperçu de ce que vous apprendrez :

  • Signification du Mode « En récupération » — Pourquoi votre base de données entre dans cet état et ce que SQL Server fait en arrière-plan.
  • Les 3 Phases de la Récupération — Une explication claire des phases d’Analyse, de Redo et d’Undo que SQL Server suit pendant la récupération.
  • Causes Courantes des Retards — Des journaux de transactions volumineux aux fichiers journaux virtuels (VLFs) excessifs, découvrez ce qui pourrait ralentir le processus.
  • Comment Revenir en Ligne — Apprenez les étapes pratiques pour restaurer votre base de données dans un état cohérent, que ce soit en attendant ou en utilisant des outils de réparation SQL.
  • Quand Demander de l’Aide Avancée — Que faire si le processus de récupération semble bloqué et qu’aucun progrès n’est réalisé.

À la fin de ce guide, vous aurez une compréhension solide du processus de récupération de SQL Server et des outils que vous pouvez utiliser pour remettre votre base de données en ligne le plus rapidement possible.

Comprendre le Mode « En récupération » dans SQL Server

Lorsque SQL Server redémarre ou qu’une base de données est restaurée à partir d’une sauvegarde, elle entre dans un mode ‘En récupération’ pour maintenir l’intégrité des données. Pendant cette phase, SQL Server rejoue ou annule les transactions incomplètes pour prévenir la corruption des données et garantir la cohérence transactionnelle.

Après le redémarrage de SQL Server, la base de données passe en mode « En récupération ». Vous pouvez également voir la base de données SQL Server dans un état de récupération lors de son démarrage ou lors de sa restauration à partir d’une sauvegarde.

Figure 1 – Base de données SQL en mode « En récupération »

L’état « récupération » de la base de données signifie que celle-ci effectue un processus de récupération et sera automatiquement mise en ligne une fois le processus terminé. Cependant, il se peut que vous rencontriez une lenteur de la récupération et que la base de données reste bloquée dans un état de récupération. Votre base de données pourrait toujours être en état de récupération, car les bases de données SQL passent par trois phases de récupération, ce qui peut prendre du temps en fonction de la taille de vos fichiers de base de données.

Les 3 phases de récupération des bases de données SQL

En général, lorsque la base de données n’est pas arrêtée correctement lors du redémarrage de SQL Server, elle subit une récupération après incident, garantissant que la base de données reste cohérente. Il y a trois phases de récupération que doit traverser une base de données SQL :

Phase 1 : Analyse

Cette phase commence à partir du « dernier point de contrôle jusqu’à la fin du journal des transactions. » Elle crée une table ‘Dirty Page Table’ (DPT) qui aide à déterminer toutes les pages sales au moment du crash. De plus, elle crée une table ‘Active Transaction Table’ (ATT) pour identifier les transactions non validées lorsque le SQL Server s’est arrêté.

Phase 2 : Refaire

Dans cette phase, SQL Server applique toutes les modifications qui ont eu lieu après le point de contrôle et avant le crash. Essentiellement, dans la phase de réexécution, toutes les transactions qui sont validées mais qui n’ont pas encore été écrites dans le fichier de données SQL (.mdf/.ldf) via le point de contrôle doivent être appliquées.

Phase 3 : Annuler

S’il y avait des transactions non validées au moment de la récupération de la base de données, elles doivent être annulées dans la phase d’annulation pour ramener la base de données à un état cohérent.

Que faire si votre base de données est bloquée en mode de récupération ?

Vérifiez le journal des erreurs SQL Server pour voir le tout premier message dans la base de données qui pourrait ressembler à :

Démarrage de la base de données ‘NomDeLaBaseDeDonnées’

Cela signifie que les fichiers de la base de données sont ouverts et que le processus de récupération a commencé. Peu de temps après, vous devriez voir SQL Server passer par 3 phases de récupération. Si vous recherchez des conseils sur la façon de sauvegarder et de restaurer votre base de données, consultez ce guide sur la sauvegarde et la restauration des bases de données Azure SQL.

La phase 1 de la récupération de la base de données est montrée ci-dessous :

Plain Text

 

Après l’achèvement de la phase 1, SQL Server passera par les phases 2 et 3 de récupération :

Plain Text

 

Une fois que les phases 2 et 3 seront complètes, vous verrez quelque chose de similaire à :

Plain Text

 

Dans le journal des erreurs, prêtez attention au message « aucune action de l’utilisateur n’est requise ». Cela indique que la base de données est en état de récupération. Cependant, la récupération peut prendre plus de temps que prévu et la base de données restera bloquée en mode de récupération.

Raisons pour lesquelles une base de données SQL reste bloquée en mode « En récupération »

Voici les raisons qui peuvent entraîner le blocage d’une base de données SQL en mode de récupération :

  • Une transaction en cours est en train de s’annuler
  • La taille du fichier journal des transactions est énorme
  • Trop de fichiers journaux virtuels (VLF) se trouvent dans le journal des transactions de la DB
  • Il y avait un bogue dans SQL Server, qui est maintenant corrigé.

Que pouvez-vous faire pour ramener la base de données à un état cohérent ?

Solution temporaire 1 : Attendre que la récupération de la base de données soit complète

La solution la plus évidente pour remettre la base de données en ligne est d’être patient et d’attendre que le processus de récupération soit complet ; cela pourrait prendre des heures ou des jours. Si la récupération prend plus de temps que prévu pour une base de données dans un SQL Server 2008 ou 2008 R2, l’application de correctifs de Microsoft peut aider.

Note:Évitez d’exécuter la commande RESTORE pour mettre la base de données en ligne dans un état cohérent, car SQL Server tente déjà d’effectuer la même tâche. De plus, exécuter ‘RESTORE with..Recovery’ signifie faire passer la base de données par les mêmes étapes à nouveau.

Astuce 2 : Utilisez un outil professionnel de réparation de base de données SQL

Si la récupération est terminée mais échoue à mettre la base de données dans un état cohérent, l’utilisation d’un outil de réparation SQL spécialisé peut aider à restaurer la base de données dans son état d’origine.

  • Stellar Repair for MS SQL — Un outil spécialisé qui aide à restaurer les bases de données SQL dans leur état d’origine après une corruption ou une défaillance.
  • ApexSQL Recover — Cet outil aide à récupérer les données de base de données SQL Server supprimées, tronquées ou corrompues.
  • dbForge SQL Complete — Bien qu’étant principalement une extension IDE, il offre des fonctionnalités utiles de gestion des erreurs et de dépannage.
  • Redgate SQL Data Recovery — Redgate fournit une gamme d’outils SQL Server, y compris des fonctionnalités de récupération de données.
  • Outil de récupération SysTools SQL — Connu pour récupérer des fichiers de base de données SQL corrompus ou endommagés (.MDF et .NDF) et les ramener à un état utilisable.
  • Kernel for SQL Database Recovery — Cet outil peut récupérer et restaurer des bases de données SQL Server à la fois de la corruption et des arrêts inattendus.
  • Récupération de base de données SQL Aryson — Un autre outil qui peut réparer et restaurer des fichiers MDF et NDF dans SQL Server.

Conclusion

Dans cet article, nous avons couvert ce que cela signifie lorsqu’une base de données SQL est bloquée en mode ‘En récupération’, les trois phases critiques de la récupération (Analyse, Refaire et Annuler), et ce que vous pouvez faire pour remettre la base de données en ligne. Nous avons également discuté des causes possibles, allant des journaux de transactions volumineux à trop de fichiers journaux virtuels (VLFs).

Si votre base de données SQL est toujours bloquée en mode récupération, rappelez-vous que la patience est essentielle. Évitez d’exécuter une commande RESTORE, car cela redémarre le processus de récupération. Pour des problèmes graves où l’intervention manuelle échoue, envisagez d’utiliser un outil professionnel de réparation de base de données SQL pour restaurer vos données.

Si vous avez trouvé ce guide utile, partagez-le avec votre équipe ou laissez un commentaire avec vos expériences de récupération SQL.

Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode