Restaurer le fichier bak dans des fichiers de base de données mdf et ldf plus petits


11

J'ai une base de données héritée dont le manque de conception cauchemardesque ne sera pas abordé ici, mais les fichiers sur le serveur sont (relativement) énormes. J'ai:

MyDatabase.mdf: 24.8GB
MyDatabase.ldf: 114.6GB

Cette base de données est sauvegardée dans un fichier .bak tous les soirs et envoyée à notre serveur de rapports, où elle est restaurée. Le fichier .bak est beaucoup plus petit avec seulement 1,8 Go.

Cependant, lorsque j'essaie de le restaurer sur le serveur de rapports, il échoue en raison d'un espace insuffisant. Il y a environ 100 Go d'espace libre sur le serveur, et il essaie de consommer l'intégralité des 139,4 Go que les fichiers ont consommés sur le serveur d'origine. À moins que ma connaissance de la compression ne soit horriblement erronée, je suis assez confiant que le fichier de 1,8 Go n'augmente pas réellement de 7400%.

Ma question: existe-t-il un moyen de dire à SQL Server de restaurer ce fichier de sauvegarde sans réserver cet espace à l'avance? Je ne me soucie d'aucun des journaux; J'ai juste besoin que les données soient là. Je comprends les bases de données du point de vue du développement et du schéma, mais je ne suis en aucun cas une sorte de DBA.

C'est sur SQL Server 2008 R2. Merci pour toute aide ou suggestion.

Réponses:


11

La sauvegarde contient deux informations:

  • la disposition des fichiers de la base de données et les métadonnées, c.-à-d. RESTORE FILELISTONLY ...
  • les données réelles

Les données réelles de la sauvegarde sont celles de 1,8 Go. Mais les métadonnées décrivent la disposition des fichiers comme sur le serveur de production d'origine. Bien qu'il ressemble à la compression, ce n'est pas une compression réelle. Est juste des métadonnées par rapport au contenu. le problème est que pendant la restauration, la machine de génération de rapports crée une mise en page telle que décrite dans les métadonnées, donc 114,6 Go + 24,8 Go. Maintenant, pour la vraie question: pouvez-vous le restaurer sans recréer la disposition du fichier DB d'origine? Non. Cependant, il existe une autre solution à votre problème: remettre la base de données d'origine en échec. Réduire le journal des transactions couvre les étapes à suivre, car le journal est votre principal problème. Ensuite, je déploierais l' envoi de journaux au lieu de la sauvegarde / restauration.


Je vous remercie; la réduction du journal des transactions a parfaitement fait l'affaire.
eouw0o83hf

1
Envoi de journaux au lieu de sauvegardes de journaux ??
Thomas Stringer

4
@Shark: envoi de journaux au lieu de sauvegardes complètes , comme moyen de livrer la base de données à la machine de génération de rapports.
Remus Rusanu

Oh d'accord, j'ai complètement raté cette partie de la question. Merci pour la clarification!!
Thomas Stringer

0

SQL Server 2012 permet d'utiliser uniquement le fichier mdf de base de données et de le joindre à SQL Server: http://msdn.microsoft.com/en-us/library/ms174385.aspx . SQL Server crée un tout nouveau fichier ldf où vous pouvez spécifier la taille. Puis:

  • utiliser un modèle de récupération simple pour empêcher la croissance de votre fichier journal, ou
  • utilisez le modèle de récupération complète et effectuez des sauvegardes régulières du journal des transactions. Cela empêchera également la croissance du fichier journal
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.