Comment restaurer une base de données SQL Server et réduire ses fichiers en même temps?

9

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 ?

Massimo
la source
J'ai eu un problème similaire. L'espace DB d'origine pris sur le disque était d'environ 30 Go (avec environ 1,5 Go de données réelles) et je souhaite le restaurer sur mon serveur MSSQL Express local. Le problème évident est que mon serveur local n'autorise que max. de 10 Go, car il s'agit d'une édition gratuite. Donc, je serais en mesure de le faire, si je pouvais réduire les fichiers avant d'essayer de restaurer la base de données, mais ...
userfuser

Réponses:

6

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.

TomTom
la source
2

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.

Nick Kavadias
la source
1

De manière générale, non. Quelques idées aléatoires qui peuvent ou non vous être utiles:

  • Sauf si vous avez absolument besoin des données de cette sauvegarde spécifique , vous pouvez créer une nouvelle base de données (vide) de la taille cible et utiliser des copies en bloc (ou SSIS) pour pousser toutes les tables de la base de données actuelle (en direct) dans votre copie.
  • Il existe des outils tiers (Redgate Compare, par exemple) qui peuvent aider à automatiser ce genre de chose, s'il s'agit de plus qu'une opération ponctuelle.
  • Certains logiciels de sauvegarde tiers (Quest Litespeed, par exemple) peuvent effectuer une " récupération au niveau de l'objet ", qui peut restaurer des tables individuelles ou d'autres objets dans une nouvelle base de données (vide). Même si la sauvegarde n'a pas été créée à l'aide de Litespeed, je pense que le produit devrait fonctionner sur les sauvegardes SQL natives.

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:

  1. Exécutez un 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)
  2. Si le fichier journal est également volumineux, exécutez un DBCC SHRINKFILEsur le fichier journal de production pendant une période de faible activité, juste après avoir effectué une sauvegarde du journal.
  3. Exécutez votre sauvegarde
  4. Effectuez une ALTER DATABASE MODIFY FILEpour 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.

BradC
la source
Merci, je le sais déjà et j'ai essayé de trouver des solutions. Je ne peux tout simplement pas toucher à la base de données d'origine, seule la sauvegarde est disponible ... et elle a été configurée de cette façon.
Massimo