web-dev-qa-db-fra.com

Est-il possible de restaurer bak du serveur sql et de réduire le journal en même temps?

Nous avons un fichier bak d'un client que nous avons transféré à nos bureaux de développement pour une enquête sur les problèmes. La sauvegarde est actuellement de 25 Go et la base de données restaurée est à peu près de la même taille, mais elle a besoin de 100 Go pour être restaurée. Je crois que c'est parce que la base de données est configurée pour avoir une taille de journal des transactions de 75 Go. Après avoir restauré la base de données, nous pouvons réduire le fichier journal, mais existe-t-il un moyen de le faire dans la restauration?

26
Adam Butler

Il n'y a aucun moyen de réduire la sauvegarde dans le cadre du processus de restauration. La base de données restaurée doit ressembler exactement à la base de données source, à la seule exception étant que vous pouvez modifier les lettres de lecteur et les dossiers.

16
mrdenny

Il y a un do-not-ever-do-this-in-a-live-environment hack que vous pouvez utiliser là où l'espace est limité, en restaurant le fichier journal dans un dossier compressé. Essayez-le en compressant un dossier existant et en le restaurant entraînera une erreur, vous devez donc tricher avec un lien symbolique.

  1. Créez un dossier compressé D:\LogCompressed\
  2. Créez un lien symbolique vers le dossier compressé mklink /D /J D:\Log\ D:\LogCompressed\

  3. Restaurez votre base de données avec le fichier ldf pointant sur D:\Log\

  4. Réduire le fichier journal à une taille appropriée

  5. Détachez la base de données, déplacez le fichier journal dans un dossier non compressé, attachez

C'est sale, c'est de la triche, NE LE FAITES JAMAIS EN DIRECT, mais ça marche. Un test rapide d'une base de données nouvellement créée avec un fichier journal de 32 Mo montre qu'elle occupe 330 Ko sur le disque lorsqu'elle est compressée, décompresse le dossier et que la taille du disque est de retour à 32 Mo.

34

Je crois que la raison pour laquelle votre sauvegarde est de 25 Go et que la base de données restaurée est de 100 Go n'est pas à cause de votre journal des transactions. Ce que je suppose, vos fichiers de base de données ont 100 Go d'espace alloué et il y a 25 Go de données réelles dans la base de données.

Il y a une différence entre espace de fichier de base de données alloué et espace de données utilisé. Dans ce cas, le premier est de 100 Go et le second de 25 Go.

9
Thomas Stringer