Résumé: Si vous vous trouvez dans cette situation, vous voudrez probablement l’option 1 ci-dessous. Ignorez-le pour résoudre le problème ou lisez la suite pour plus d'explications.
Une base de données dans Microsoft SQL Server a différents "modes de récupération", elle peut être configurée pour être dans:
Facile. Vous pouvez effectuer des sauvegardes complètes et des sauvegardes différentielles d’une base de données en mode de récupération simple. Une sauvegarde complète contient la base de données entière à un moment donné, tandis qu'une sauvegarde différentielle contient tout ce qui a changé depuis la dernière sauvegarde complète.
Un plan de sauvegarde pour une telle base de données pourrait être "Une sauvegarde complète tous les dimanches, plus une sauvegarde différentielle quotidienne". Les sauvegardes différentielles sont donc relativement petites, car elles ne contiennent que des données modifiées depuis le dimanche précédent. En cas de panne, vous ne perdez pas plus d'une journée de données.
Plein. Vous pouvez toujours effectuer des sauvegardes complètes et différentielles, mais vous devez également effectuer des sauvegardes périodiques du journal des transactions. Alors que les sauvegardes différentielles contiennent des modifications de la base de données depuis la dernière sauvegarde complète, log backukps ne contient que des données depuis la dernière sauvegarde du journal . Par conséquent, les sauvegardes du journal doivent être petites et rapides.
Un plan de sauvegarde pour une base de données de récupération complète peut être "une sauvegarde complète hebdomadaire, une sauvegarde différentielle quotidienne et une sauvegarde du journal des transactions toutes les 5 minutes". Cela signifie que vous ne perdez jamais plus de 5 minutes de données. Lors de la restauration d'une telle base de données, vous devez restaurer la dernière sauvegarde différentielle, puis appliquer chaque sauvegarde de journal effectuée depuis ce point.
En vrac connecté. C'est un peu comme un "mode de récupération complet, sauf quand je dis le contraire".
La récupération complète est un avantage car vous pouvez restaurer votre base de données presque jusqu’au moment du blocage, mais vous devez également effectuer des sauvegardes du journal. Pourquoi? Parce que les journaux à l'intérieur du fichier du journal des transactions ne sont marqués comme "tronqués" qu'une fois que vous effectuez une sauvegarde du journal. Une fois qu'un journal est tronqué, les nouveaux journaux sont autorisés à l'écraser.
Si vous n'effectuez jamais de sauvegarde de journal, rien dans le journal des transactions n'est jamais marqué comme tronqué. Par conséquent, le fichier journal doit croître à chaque changement de base de données.
Pour plus d'informations sur le fonctionnement du journal des transactions, veuillez lire les excellents articles de Paul Randal:
Maintenant, dans la situation où vous vous trouvez avec un journal de transactions énorme, il existe deux options réelles:
Option 1: passer au modèle de récupération simple
Vous n'avez probablement pas besoin de faire des sauvegardes de journaux (puisque vous ne le faites pas maintenant), vous pouvez donc simplement passer à un modèle de récupération simple:
ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE
Ceci marquera tout le journal de transaction comme étant tronqué, ainsi le fichier journal ne deviendra pas plus gros. Une fois que vous avez fait cela, pour réduire le fichier journal physique:
DBCC SHRINKFILE N'MyDatabase.ldf'
Cela signifie que le fichier journal se tronque automatiquement après chaque transaction. Par conséquent, sa taille ne deviendra pas incontrôlable. Vous n'aurez probablement pas à gérer le journal des transactions; Cependant, vous perdez la possibilité de restaurer votre base de données au-delà de votre dernière sauvegarde complète ou différentielle.
Option 2: commencer à prendre des sauvegardes du journal des transactions
Si vous avez vraiment besoin d'une récupération complète, vous devez commencer à effectuer des sauvegardes du journal des transactions.
Tout d'abord, pour vous sortir de la mauvaise situation, vous voulez tronquer tout le journal, puis le réduire:
BACKUP LOG [MyDatabase] WITH TRUNCATE_ONLY
GO
DBCC SHRINKFILE N'MyDatabase.ldf'
GO
Votre fichier de journal des transactions doit maintenant avoir une taille raisonnable. Il va recommencer à grandir immédiatement; bien que. Vous devez maintenant commencer à prendre des sauvegardes de journal régulièrement. Vous pouvez le faire via un plan de maintenance ou en exécutant régulièrement une commande telle que:
BACKUP LOG [MyDatabase] TO DISK = N'C:\Backups\MyDatabase_Log_Backup1.bak' WITH INIT
Note latérale
DBCC SHRINKFILE
n'est pas destiné à être utilisé régulièrement:
- Les fichiers journaux retrouvent une taille stable en fonction de l'activité de la base de données et de la fréquence à laquelle vous effectuez des sauvegardes de journaux.
- Réduire les fichiers de données fragmente complètement vos index.
Si vous réduisez régulièrement les fichiers journaux, vous devriez probablement soit passer au modèle de récupération simple, soit effectuer des sauvegardes de journal plus fréquentes.