Dépannage du fichier journal des transactions (.LDF) de la base de données système BarTender
Symptômes
Vous avez remarqué que la base de données système est devenue anormalement volumineuse et que la maintenance échoue avec le message d’erreur suivant :
Procédure stockée : [dbo].[SpDeleteOlderRecords] Échec ; Message interne : Le journal des transactions pour la base de données 'SystemDB' est plein à cause de 'ACTIVE_TRANSACTION'
Environnement
Base de données système BarTender
Diagnostic
Dans la Console d’administration, sous « Tâches administratives > Afficher la taille de la base de données... », vérifiez que la taille du fichier journal des transactions est faible.
Normalement, le fichier journal des transactions SQL Server (.LDF) pour la base de données système BarTender augmente pendant la maintenance de la base de données, mais il devrait retrouver sa taille d’origine une fois la maintenance terminée. Cependant, cela ne se produit pas toujours et le fichier LDF commence à devenir trop volumineux.
Solution
Le journal des transactions du client n’est pas assez grand pour gérer toutes les informations de transaction nécessaires aux opérations de maintenance. Les opérations de maintenance se composent de trois étapes :
- Sauvegarde
- Suppression des anciens enregistrements
- Réorganisation ou reconstruction des index (peut nécessiter beaucoup d’espace dans le journal des transactions)
Il est recommandé d’allouer plus d’espace au journal des transactions. De plus, le modèle de récupération doit être « Simple », car il utilise beaucoup moins d’espace dans le journal des transactions.
Étapes :
- Dans SQL Server Management Studio, vérifiez la taille maximale de votre fichier journal des transactions en faisant un clic droit sur votre base de données système > Propriétés > Fichiers.
- Dans les propriétés de la base de données système, vérifiez que le modèle de récupération de votre base de données système est défini sur Simple en faisant un clic droit sur votre base de données système > Propriétés > Options > Modèle de récupération
- Exécutez la procédure de « déverrouillage manuel » pour débloquer la maintenance, si nécessaire (voir ci-dessous).
- Lancez la Console d’administration pour effectuer la maintenance.
- Une fois la maintenance terminée, vérifiez la taille du fichier journal des transactions pour voir combien il a grossi.
- Retournez dans les propriétés de la base de données et définissez la limite de taille du fichier à une valeur proche de la taille du fichier sur le disque, au lieu de laisser en illimité.
Remarque : si la base de données système doit être nettoyée chaque semaine en raison des limites de taille de SQL Server Express, la limite de 10 Go peut ne pas suffire. Le système de base de données peut nécessiter une version complète de SQL Server et un disque dédié (éventuellement une autre image VMWare/serveur lame). Sachez que ces modifications n’annulent pas la nécessité d’effectuer régulièrement des sauvegardes et des opérations d’archivage sur la base de données.
Procédure de « déverrouillage manuel »
- Arrêtez le service Windows « BarTender System Service ».
- Dans l’Explorateur d’objets de SQL Server Management Studio (généralement le volet de gauche), développez votre base de données, puis ouvrez le dossier « Programmabilité » et sélectionnez le dossier « Procédures stockées ».
- Exécutez la procédure ci-dessous (si 0 ligne est affectée, relancez l’appel une fois de plus) :
exec SpDsUnlockMaintenance 0
- Accédez à la procédure « SpDeleteRecords ».
- Faites un clic droit sur « SpDeleteRecords » et choisissez « Générer la procédure stockée en tant que » > « ALTER vers » > « Nouvelle fenêtre de l’éditeur de requête »
- Dans le nouvel éditeur, retirez « WITH EXECUTE AS 'dbo' » de la ligne « ALTER PROC », pour qu’elle apparaisse ainsi :
ALTER PROC [dbo].[SpDeleteRecords](@pastUtcTicks bigint, @categories nvarchar(1024))
- Exécutez maintenant cette requête (généralement avec F5) pour modifier la procédure stockée.
- Redémarrez le service Windows « BarTender System Service ».
Réduire la taille du journal
Vous devez exécuter la requête suivante pour RÉDUIRE la taille du fichier journal de la base de données actuelle après une opération qui crée une grande quantité d’espace inutilisé, comme une opération de troncature ou de suppression de table. (Dans le script ci-dessous, vous devrez remplacer [Database name] par le nom de votre base de données)
-- Définit le modèle de récupération de la base de données système sur SIMPLE, puis exécute l’opération DBCC SHRINKFILE sur le journal des transactions.
ALTER DATABASE "[Database name]" SET RECOVERY SIMPLE
DBCC SHRINKFILE ([Database name]_Log, 1);
GO
Ressources supplémentaires