web-dev-qa-db-fra.com

Pourquoi la taille du fichier .bak augmente / double à chaque sauvegarde consécutive sur SQL Server?

J'exécute une base de données simple sur SQL Server 2012 Express.

Aujourd'hui encore, lorsque je sauvegarde la base de données, la taille du fichier .bak Double à ce qu'elle était de la sauvegarde précédente quelques minutes auparavant. J'ai effectué plusieurs sauvegardes aujourd'hui (via SQL Server Management Studio -> type de sauvegarde: complète), et avec chacune, le fichier .bak Continue de doubler.

Dans SQL Server Mgmt Studio, lorsque je clique avec le bouton droit sur ma base de données -> 'Rapports' -> 'Événements de sauvegarde et de restauration' -> développez 'Opérations de sauvegarde réussies':

Le rapport ici montre que la dernière taille de sauvegarde a été enregistrée en tant que 55 Mo, mais lorsque je vais dans le fichier .bak Réel, il s'agit de 260 Mo. Chaque autre sauvegarde aujourd'hui a également été enregistrée en tant que taille de 55 Mo, tandis que leurs fichiers .bak Correspondants sont plusieurs fois plus volumineux (et augmentent à chaque opération de sauvegarde).

Qu'est-ce qui pourrait mal tourner? Je n'ai apporté aucune modification à la base de données depuis que cela a commencé.

9
full_prog_full

Le fichier de sauvegarde contient plusieurs copies de la base de données car il n'est pas "initialisé" ou "formaté" avec chaque sauvegarde.

Accédez au tableau "Options" de la boîte de dialogue "Sauvegarder la base de données" et sélectionnez "Remplacer tous les jeux de sauvegarde existants":

enter image description here

12
Max Vernon

Je suppose que vous sauvegardez à chaque fois le même fichier. Il existe une option pour INIT ou NOINIT lorsque vous exécutez une sauvegarde. NOINIT (qui est la valeur par défaut) lui indique d'ajouter simplement une sauvegarde supplémentaire au fichier.

Par BOL:

{NOINIT | INIT}

Contrôle si l'opération de sauvegarde ajoute ou remplace les jeux de sauvegarde existants sur le support de sauvegarde. La valeur par défaut consiste à ajouter le jeu de sauvegarde le plus récent sur le support (NOINIT).

Ainsi, chaque fois que vous exécutez votre sauvegarde de 55 Mo, le fichier augmente d'environ 55 Mo.

Si vous incluez la clause INIT dans votre commande de sauvegarde, elle remplacera la sauvegarde existante à chaque fois.

L'autre option est bien sûr d'exécuter vos sauvegardes dans de nouveaux fichiers à chaque fois et de nettoyer les anciens fichiers. C'est souvent une bonne idée dans le cas où l'une des sauvegardes actuelles est défectueuse, ou si vous devez récupérer dans l'historique.

8
Kenneth Fisher

Si vous le faites directement dans SQL, n'utilisez pas l'assistant SQL Server Management Studio. Vous devez spécifier "NOINT" ou "INIT" lors de la sauvegarde pour dire ajouter au fichier ou l'écraser respectivement.

Voici le SQL pour ça

BACKUP DATABASE <data_base_name> TO DISK = <File_Path> WITH INIT
1