web-dev-qa-db-fra.com

Modèle de récupération SIMPLE ou COMPLET pour les bases de données?

Quand dois-je utiliser le modèle de récupération complète 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 de la valeur par défaut, mais aujourd'hui, j'ai rencontré cette erreur:

Microsoft OLE DB Provider for SQL Server (0x80040E14) Le journal des transactions de la base de données 'NOM DE LA BASE DE DONNÉES' est plein. Pour savoir pourquoi l'espace du journal ne peut pas être réutilisé, consultez la colonne log_reuse_wait_desc dans sys. bases de données

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, donc je n'ai aucune idée de la façon dont le journal peut être complet sur cette base de données, et pas les autres.

Pour réduire le journal et rendre la base de données accessible à nouveau, j'ai changé le modèle de récupération de PLEIN à SIMPLE et réduit le journal du fichier logique, avec la commande suivante

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

Cela a aidé, mais maintenant je dois comprendre POURQUOI cela a aidé, COMMENT cette situation commencé et COMMENT pour éviter cela à l'avenir?

MODIFIER:

Tous les soirs à 1 heure, nous effectuons une sauvegarde scriptée de chaque base de données sur le serveur. Cela se 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 la réduction de bases de données vont-ils être en conflit avec ce script?

Nous ne faisons aucun autre type de sauvegarde des bases de données, et donc pas les journaux de transactions, devrions-nous?

39
Behrens

Quand dois-je utiliser le modèle de récupération complète et quand dois-je utiliser le modèle de récupération simple pour les bases de données?

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 d'une récupération ponctuelle de votre base de données et lorsque la dernière sauvegarde complète ou différentielle est suffisante comme 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 )

Microsoft OLE DB Provider for SQL Server (0x80040E14) Le journal des transactions de la base de données 'NOM DE LA BASE DE DONNÉES' est plein. Pour savoir pourquoi l'espace du journal ne peut pas être réutilisé, consultez la colonne log_reuse_wait_desc dans sys. bases de données

La raison pour laquelle vous avez obtenu cette erreur (probablement) est que vous n'avez pas sauvegardé votre journal des transactions. Lorsqu'il n'est pas sauvegardé, il continuera à agrandir physiquement le fichier journal des transactions (à condition que la 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 marquer ces VLF que pour réutilisation et autoriser la nature "enveloppante" du journal des transactions lorsque vous effectuez une sauvegarde du journal des transactions (et quelques autres exigences, telles qu'aucune transaction active, certains aspects de réplication, etc.).

Pour réduire le journal et rendre la base de données accessible à nouveau, j'ai changé le modèle de récupération de PLEIN à SIMPLE et réduit le journal du fichier logique, avec la commande suivante

......

Cela a aidé, mais maintenant je dois comprendre POURQUOI cela a aidé, COMMENT cette situation a commencé et COMMENT l'empêcher à l'avenir?

Cela vous a aidé, car en définissant votre base de données sur le modèle de récupération simple, vous avez dit à SQL Server que vous ne vous souciez plus de la récupération ponctuelle et de la nécessité de vous assurer que les fichiers journaux virtuels n'ont plus besoin d'ê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 :

Sous le modèle de récupération simple, à moins qu'un facteur ne retarde la troncature du journal, un point de contrôle automatique tronque la section inutilisée du journal des transactions. En revanche, dans les modèles de récupération complets et en bloc, une fois qu'une chaîne de sauvegarde des journaux a été établie, les points de contrôle automatiques ne provoquent pas de troncature des journaux.

Ensuite, vous avez réduit un fichier de base de données physique et, comme il y avait de l'espace libre dans votre journal des transactions, il a pu réduire physiquement le fichier NTFS.

La lecture mérite d'être consacrée à:

  1. Modèles de récupération
  2. Gestion des journaux de transactions (Gail Shaw)
  3. Facteurs pouvant retarder la troncature du journal

MODIFIER après votre modification :

Le nouveau modèle de récupération et la réduction de bases de données vont-ils être en conflit avec ce script?

Cette commande BACKUP DATABASE Fonctionnera avec les deux modèles de récupération. En ce qui concerne la réduction de routine de la base de données ... NE LE FAITES PAS !!!! Sérieusement, dimensionnez votre base de données en conséquence, et si vous utilisez la récupération complète Le modèle garantit ensuite que vous effectuez des fichiers journaux de transactions courants et fréquents, non seulement pour garder la taille du journal des transactions à distance, mais également pour répondre aux objets de point de récupération.

Nous ne faisons aucun autre type de sauvegarde des bases de données, et donc pas les journaux de transactions, devrions-nous?

Si votre base de données utilise le modèle de récupération complète, alors oui, vous devez effectuer des sauvegardes du journal des transactions. Si votre base de données est en récupération simple, vous ne pouvez physiquement pas effectuer de sauvegarde du journal des transactions.

Quant au modèle de récupération à utiliser (simple vs complet), nous ne pouvons pas prendre cette décision pour vous. Seuls vous, votre équipe commerciale et vos SLA peuvent le faire.

62
Thomas Stringer