Quand dois-je utiliser le modèle de récupération complet et quand dois-je utiliser le modèle de récupération simple pour les bases de données?
J'ai toujours utilisé le modèle de récupération complète, car il s'agit du modèle par défaut, mais aujourd'hui, j'ai rencontré cette erreur:
Fournisseur Microsoft OLE DB pour SQL Server (0x80040E14) Le journal des transactions de la base de données 'DATABASE NAME' est saturé. Pour savoir pourquoi l'espace dans le journal ne peut pas être réutilisé, consultez la colonne log_reuse_wait_desc dans sys.databases.
La base de données spécifique est en fait l’une des bases de données les plus petites et les plus inactives sur mon serveur. Par conséquent, je ne sais pas du tout comment le journal peut être saturé sur cette base de données, pas sur les autres.
Pour réduire le journal et rendre la base de données accessible à nouveau, j'ai remplacé le modèle de récupération de COMPLET par SIMPLE et rétréci le journal des fichiers logiques à l'aide de la commande suivante.
alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go
Cela a aidé, mais je dois maintenant comprendre POURQUOI cela a aidé, COMMENT cette situation a commencé et COMMENT éviter que cela ne se produise à l'avenir?
MODIFIER:
Tous les soirs à 13 heures, nous effectuons une sauvegarde par script de chaque base de données du serveur. Ceci est fait par un script de 31 lignes où la partie la plus importante est
set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT
Le nouveau modèle de récupération et les bases de données seront-ils en conflit avec ce script?
Nous ne faisons aucune autre sauvegarde des bases de données, et donc pas des journaux de transactions, devrions-nous?
Réponses:
Vous devez utiliser le modèle de récupération complète lorsque vous avez besoin d'une récupération ponctuelle de votre base de données. Vous devez utiliser un modèle de récupération simple lorsque vous n'avez pas besoin de restaurer votre base de données à un moment précis et lorsque la dernière sauvegarde complète ou différentielle est suffisante en tant que point de récupération. (Remarque: il existe un autre modèle de récupération, enregistré en bloc. Pour plus d'informations sur le modèle de récupération enregistré en bloc, voir cette référence. )
La raison pour laquelle vous avez eu cette erreur (très probablement) est que vous n'avez pas sauvegardé votre journal des transactions. Lorsqu'il n'est pas sauvegardé, le fichier journal de transactions continue de croître physiquement (à condition que croissance automatique soit activée et que maxsize le permette), car il ne peut réutiliser aucune des "parties" du journal des transactions (fichiers journaux virtuels). Il ne peut que réutiliser les fichiers VLF et autoriser le "bouclage" du journal des transactions lorsque vous effectuez une sauvegarde du journal des transactions (et quelques autres exigences, telles que l'absence de transactions actives, certains aspects de la réplication, etc.).
Cela vous a aidé car, en définissant votre base de données sur le modèle de récupération simple, vous avez indiqué à SQL Server que la récupération à un moment donné ne vous intéressait plus et qu'il était nécessaire de garantir que les fichiers journaux virtuels ne doivent plus être conservés et marqués comme actifs. maintenant, un processus de point de contrôle marque ces VLF comme inactifs.
Extrait / citation tiré de cette référence MSDN :
Vous avez ensuite procédé à une réduction physique du fichier de base de données et, du fait qu’il y avait de l’espace libre dans votre journal des transactions, il était maintenant possible de réduire physiquement le fichier NTFS.
Lire vaut la peine de passer du temps sur:
EDIT après votre Edit :
Cette
BACKUP DATABASE
commande fonctionnera avec l'un ou l'autre des modèles de récupération. En ce qui concerne la réduction de la base de données de routine ... NE LE FAITES PAS !!!! Sérieusement, dimensionner votre base de données en conséquence, et si vous utilisez le modèle de récupération complet, assurez-vous que vous utilisez des fichiers de journaux de transactions fréquents et courants, non seulement pour garder la taille du journal des transactions à distance, mais également pour répondre aux objets de point de récupération.Si votre base de données utilise le modèle de récupération complète, alors oui, vous devriez effectuer des sauvegardes du journal des transactions. Si votre base de données est en restauration simple, vous ne pouvez physiquement pas effectuer de sauvegarde du journal des transactions.
En ce qui concerne le modèle de récupération à utiliser (simple ou complet), nous ne pouvons pas prendre cette décision à votre place. Seuls vous, votre équipe commerciale et vos accords de niveau de service peuvent le faire.
la source