Résolution des problèmes en cas de journal des transactions saturé (erreur 9002)

Cette rubrique décrit les réponses possibles et propose quelques suggestions qui vous aideront à éviter cette situation dans le futur. Lorsque le journal des transactions est saturé, le Moteur de base de données SQL Server émet une erreur 9002. Le journal peut être renseigné lorsque la base de données est en ligne ou en cours de récupération. Si le journal se remplit tandis que la base de données est en ligne, cette dernière reste en ligne et peut uniquement être lue mais pas mise à jour. Si le journal se remplit en cours de récupération, le Moteur de base de données marque la base de données en tant que RESOURCE PENDING (ressource en attente) Dans les deux cas, une intervention de l'utilisateur est nécessaire pour libérer de l'espace disque.

Notes

Généralement, lorsque le journal des transactions manque d'espace sur le disque, la base de données est toujours accessible en mode de lecture seule. Toutefois, lorsque le niveau d'isolement d'instantané est activé, si vous supprimez une ligne sur un segment de mémoire (une table sans index cluster) et que le journal des transactions est rempli avant que l'enregistrement de journal pour la ligne fantôme ne soit persistant, la base de données est mise en mode hors connexion. Si cela se produit, la base de données redémarre automatiquement, fait l'objet d'une récupération complète et revient en ligne.

Réagir à un journal des transactions complet

La réponse adéquate à un journal des transactions saturé dépend en partie de la ou des conditions qui ont motivé le remplissage du journal. Pour découvrir les raisons qui empêchent de tronquer le journal dans une situation donnée, utilisez les colonnes log_reuse_wait et log_reuse_wait_desc de l'affichage catalogue sys.database. Pour plus d'informations, consultez sys.databases (Transact-SQL). Pour obtenir des descriptions des facteurs susceptibles de retarder la troncation du journal, consultez Facteurs pouvant retarder la troncation du journal.

Important

Si la base de données était en mode de récupération lorsque l'erreur 9002 s'est produite, récupérez la base de données à l'aide de l'instruction ALTER DATABASE database_name SET ONLINE après avoir résolu le problème.

D'autres solutions possibles en cas de saturation du journal des transactions sont les suivantes :

  • Sauvegarde du journal.

  • Libération de l'espace disque pour que le journal puisse croître automatiquement.

  • Déplacement du fichier journal vers une unité dotée d'un espace disque suffisant.

  • Augmentation de la taille du fichier journal.

  • Ajout d'un fichier journal sur un autre disque.

  • Achèvement ou suppression d'une transaction longue.

Ces solutions sont abordées dans les sections qui suivent. Optez pour une solution adaptée à votre situation.

Sauvegarde du journal

Si vous travaillez en mode de restauration complète ou en mode de récupération utilisant les journaux de transactions et si vous n'avez pas sauvegardé récemment le journal des transactions, la création d'une sauvegarde est ce qui empêche la troncation du journal. Si le journal n'a jamais été sauvegardé, vous devez créer deux sauvegardes du journal pour autoriser le Moteur de base de données à le tronquer à l'endroit exact de la dernière sauvegarde. Le fait de tronquer le journal permet de libérer de l'espace pour les nouveaux enregistrements de ce dernier. Pour empêcher le journal de se remplir à nouveau, effectuez les sauvegardes régulièrement.  

Pour créer une sauvegarde du journal des transactions

Important

Si la base de données est endommagée, consultez Sauvegardes de fichier journal après défaillance.

Libération d’espace disque

Vous pouvez libérer de l'espace sur le disque où est stocké le fichier journal des transactions de la base de données en supprimant ou en déplaçant d'autres fichiers. Ceci permet au système de récupération d'augmenter automatiquement la taille du fichier journal.

Déplacement du fichier journal vers un autre disque

Si vous ne pouvez pas libérer suffisamment d'espace disque sur le lecteur où le fichier journal se trouve actuellement, essayez de déplacer ce fichier sur une autre unité disposant d'espace suffisant.

Important

Les fichiers journaux ne doivent jamais être placés sur des systèmes de fichiers compressés.

Pour déplacer un fichier journal

Augmentation de la taille d'un fichier journal

Si le disque du journal dispose d'espace libre, vous pouvez augmenter la taille du fichier journal. La taille maximale pour les fichiers journaux est de deux téraoctets (To) par fichier journal.

Pour augmenter la taille du fichier

Si la fonctionnalité de croissance automatique est désactivée, que la base de données est en ligne et que l'espace disque disponible est suffisant, effectuez l'une des opérations suivantes :

  • Augmentez manuellement la taille du fichier pour générer un seul incrément de croissance.

  • Activez la croissance automatique à l'aide de l'instruction ALTER DATABASE pour définir un incrément de croissance différent de zéro pour l'option FILEGROWTH.

Notes

Dans les deux cas, si la limite de taille actuelle est atteinte, augmentez la valeur MAXSIZE.

Ajout d'un fichier journal sur un autre disque

Ajoutez un nouveau fichier journal à la base de données d'un autre disque doté d'un espace suffisant à l'aide de l'instruction ALTER DATABASE <nom_base_de_données> ADD LOG FILE.

Pour ajouter un fichier journal

Identification et gestion d'une transaction longue

Pour plus d'informations, consultez Gestion des transactions de longue durée.