Pourquoi un fichier .bacpac est-il si petit par rapport à un fichier .bak de la même base de données?

Jai effectué des sauvegardes de mes bases de données SQL Server 2014 Express pour limportation vers dautres serveurs et jai remarqué une différence de taille de fichier entre .bacpac et .bak.

Pourquoi un fichier .bacpac est-il si petit par rapport à un fichier .bak fichier de la même base de données?

Merci pour tout renseignement!

Réponse

A

  • .bacpac file = Schéma + Données. Notez que les données sont BCP » éditées en utilisant le format natif (pas lisible par lhomme).

    • Vous pouvez renommer le .bacpac en .zip pour voir le contenu réel.

    • Vous pouvez utiliser la ligne de commande ...DAC\bin\sqlpackage.exe pour extraire le .bacpac contenu par programme.

    • Cest un snapshot qui inclut les données utilisateur + le schéma de SQL Server ou Azure SQL Database.

  • Sauvegarde (généralement avec .bak extension) = Une sauvegarde complète de la base de données contient une copie complète de la base de données et fournit un point dans le temps unique auquel la base de données peut être restaurée. Une sauvegarde complète contient certains enregistrements du journal des transactions afin que le composant restauré (base de données, fichier ou groupe de fichiers) puisse être rendu cohérent sur le plan transactionnel.

Un BACPAC ne remplace pas une sauvegarde COMPLÈTE. Il sagit simplement dun instantané qui peut être utilisé pour déplacer une base de données dun serveur vers un autre (ou vers le cloud) et archiver une base de données existante dans un format ouvert .

Daprès mon test, voici les résultats

entrez la description de limage ici

Commentaires

  • Le fichier journal est probablement la principale raison de la différence de taille.
  • Je ' d suppose que ' s aucune donnée dindex dans le .bacpac non plus, ce qui est susceptible dêtre un GRAND contributeur à la taille du fichier.

Réponse

Une sauvegarde créée via le BACKUP DATABASE command (.bak) est une copie page par page dune base de données. Notez que la base de données SQL Server ne contient pas que des pages de données. Il existe également des pages avec des index qui peuvent être volumineux. Plus de détails ici

Une sauvegarde créée à laide de lapplication Export Data-Tier (.bacpac) lopération est simplement une ligne exportée dune base de données au format XML placée dans une archive. Vous pouvez afficher manuellement le contenu de BACPAC, il suffit de changer lextension de ce fichier en .zip.

La taille du .bacpac fichier est directement proportionnel au nombre denregistrements dans une base de données (en tenant compte du taux de compression).

La taille du fichier .bak dépend non seulement des données mais également de la taille des index.

Parfois cela peut être un problème, vérifiez par exemple cette ancienne discussion

Par conséquent, le .bacpac le fichier est généralement plus petit.

Jai exécuté les tests les plus simples avec la base de données AdventureWorks et jai obtenu ces résultats.

AdventureWorks.bacpac - 17 mb AdventureWorks.bacpac.zip - 16 mb AdventureWorks_with_compression.bak - 49 mb AdventureWorks_with_compression.bak.zip - 47 mb 

Dois-je utiliser .bacpac pour réduire la taille de ma sauvegarde?

No.

Lapplication Export \ Import Data Tier présente plusieurs inconvénients importants qui sont critiques pour les grandes bases de données:

  1. Ce nest pas une opération cohérente sur le plan transactionnel. Les tableaux sont exportés séquentiellement. Il peut y avoir un problème avec la clé étrangère. Cest doublement mauvais car vous ne le découvrez que lorsque vous essayez de récupérer. Par conséquent, lors de lexécution de cette opération, vous devez prendre un instantané de la base de données et exporter linstantané.
  2. Cela prend beaucoup plus de temps pour lexportation et limportation. Au moment où vous devez exécuter une restauration de toute urgence, vous ne pourrez pas le faire car la restauration à partir de .bacpac prendra plusieurs heures.
  3. Lexportation peut considérablement charger le serveur, en particulier pour les gros tables, qui, avec le point précédent, fait des sauvegardes régulières une décision douteuse.

La sauvegarde classique créée à laide de la commande BACKUP DATABASE est dépourvue de ces inconvénients, pour économiser de lespace, utilisez Récupération à un moment donné

Lapplication dexportation / importation au niveau des données peut être considérée comme un moyen de créer une sauvegarde uniquement pour les petites bases de données, dans les cas où vous navez pas accès à le système de fichiers. Dans ce cas, nexportez en aucun cas la base de données en direct, assurez-vous de créer un instantané pour une exportation cohérente.

Réponse

Eh bien, la plus grande différence est que les données sont compressées (en utilisant zip) pour le fichier .bacpac ce qui nest pas le cas avec un .bak normal déposer. Compressez simplement le fichier .bak et voyez quil est beaucoup plus petit;)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *