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

10

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

Aujourd'hui même, lorsque je sauvegarde la base de données, la .baktaille du fichier 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 .bakfichier 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 .bakfichier réel , elle est de 260 Mo. Chaque autre sauvegarde aujourd'hui a également été enregistrée avec une taille de 55 Mo, tandis que les .bakfichiers 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é.

full_prog_full
la source

Réponses:

14

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»:

entrez la description de l'image ici

Max Vernon
la source
8

Je suppose que vous sauvegardez à chaque fois le même fichier. Il existe une option pour INITou NOINITlorsque 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 INITclause 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 mauvaise, ou si vous avez besoin de récupérer dans l'historique.

Kenneth Fisher
la source
2

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
Muhammad Abdulwanis
la source