Disons que j'ai une base de données SQL Server dont les fichiers de données ont été créés avec une taille initiale de 100 Go, mais elle ne contient que 10 Go de données. Une sauvegarde de base de données n'aura alors qu'une taille de 10 Go.
Je veux restaurer cette sauvegarde sur un serveur différent (ou une base de données différente sur le même serveur), mais je ne veux pas qu'elle occupe le même espace disque que celui d'origine (100 Go), ce qui se produit par défaut.
Je ne peux pas réduire la base de données d'origine avant de faire une sauvegarde (c'est une base de données de production, et elle a besoin de beaucoup d'espace pré-alloué); Je pourrais réduire la base de données restaurée une fois la restauration terminée, mais je préférerais vraiment qu'elle n'occupe pas 100 Go en faisant cela; de plus, dans ce scénario spécifique, je n'ai pas beaucoup d'espace disque libre, donc la restauration ne va nulle part.
Existe-t-il un moyen de restaurer la base de données et de lui faire prendre autant d'espace que les données réelles qu'elle contient ?
Réponses:
Non, désolé - pas question. Restaurer restaure les fichiers tels qu'ils étaient lors de la sauvegarde. Schinking doit être fait après cela ou avant de prendre la sauvegarde.
la source
Si vous manquez d'espace disque, vous pouvez placer le fichier .bak sur un partage réseau et le restaurer à partir de là. Devrait fonctionner si votre serveur SQL en cours d'exécution avec un compte de domaine et donner au partage suffisamment de droits pour lire le fichier.
L'autre option qui était auparavant dans le panier des noix (mais utile uniquement si votre serveur SQL en cours d'exécution 2008 R2) est que SQL Server prend en charge la création de fichiers de base de données directement sur un partage sans avoir à utiliser un indicateur de trace et je peux le dire par expérience personnelle vous ça marche! Vous pouvez donc effectuer une restauration WITH MOVE sur un partage.
la source
De manière générale, non. Quelques idées aléatoires qui peuvent ou non vous être utiles:
Enfin, j'aime aussi la «marge de manœuvre» dans mes bases de données de production, mais 90 Go sans 100 Go au total semblent un peu extrêmes. Les étapes suivantes peuvent vous fournir ce dont vous avez besoin et ne doivent pas affecter la production:
DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)
sur le fichier de données de production pour libérer temporairement tout espace libre à la fin du fichier (un TRUNCATEONLY ne nécessite pas d'E / S et ne fragmentera pas les index)DBCC SHRINKFILE
sur le fichier journal de production pendant une période de faible activité, juste après avoir effectué une sauvegarde du journal.ALTER DATABASE MODIFY FILE
pour repousser le fichier de données de production à sa taille d'origine.Il ne devrait y avoir aucun impact sur la production en utilisant ces étapes. Le seul risque est que certaines données se trouvent juste à la fin du fichier de données de 100 Go, auquel cas l'étape (1) ne libère pas beaucoup d'espace.
la source