84 votes

Créer une nouvelle base de données à partir d'une sauvegarde d'une autre base de données sur le même serveur ?

J'essaie de créer une nouvelle base de données à partir d'une ancienne sauvegarde de la base de données sur le même serveur. Lorsque j'utilise SQL server management studio et en essayant de restaurer la nouvelle base de données à partir de la sauvegarde, j'obtiens l'erreur suivante

System.Data.SqlClient.SqlError: The backup set holds a backup of a database 
other than the existing 'test' database. (Microsoft.SqlServer.Smo)

Après avoir cherché sur Internet, j'ai trouvé ce morceau de code

    RESTORE DATABASE myDB

 FROM DISK = 'C:\myDB.bak'

 WITH MOVE 'myDB_Data' TO 'C:\DATA\myDB.mdf',

MOVE 'myDB_Log' TO 'C:\DATA\myDB_log.mdf'
GO

Je me demandais si les instructions de déplacement n'allaient pas perturber la base de données à partir de laquelle la sauvegarde a été effectuée sur ce serveur.

Merci, toute aide est la bienvenue.

146voto

danihp Points 15682

Ce que je devrais faire :

  • Cliquez sur le menu flottant "Restaurer la base de données ..." qui apparaît en cliquant à droite sur le nœud "Bases de données" dans SQL Server Management Studio.
  • Remplir l'assistant avec la base de données à restaurer et le nouveau nom.
  • Important Si la base de données existe toujours, modifiez les noms des fichiers "Restaurer sous" dans l'onglet "Fichiers" pour éviter le message d'erreur "fichiers déjà utilisés, impossible d'écraser".

Ce que je fais

Je ne sais pas pourquoi je préfère faire cela :

  • Je crée une base de données cible vierge avec mes paramètres préférés.
  • Ensuite, dans l'assistant de restauration de "SQL Server Management Studio", je recherche l'option permettant d'écraser la base de données cible. Elle se trouve dans l'onglet "Options" et s'appelle 'Ecraser la base de données existante (AVEC REMPLACER)' . Vérifiez-le.
  • N'oubliez pas de sélectionner les fichiers cibles dans la page "Fichiers".

Vous pouvez modifier les "onglets" situés à gauche de l'assistant (Général, Fichiers, Options).

89voto

Catch22 Points 1240

Il est même possible de restaurer sans créer de base de données vierge.

Dans Sql Server Management Studio, cliquez avec le bouton droit de la souris sur Bases de données et sélectionnez Restaurer la base de données... enter image description here

Dans la boîte de dialogue Restaurer la base de données, sélectionner la base de données source ou Appareil comme d'habitude. Une fois la base de données source sélectionnée, le SSMS renseigne le nom de la base de données de destination en se basant sur le nom original de la base de données.

Il est alors possible de changer le nom de la base de données et de la saisir un nouveau nom de base de données de destination .

enter image description here

Avec cette approche, il n'est même pas nécessaire d'aller dans l'onglet Options et de cliquer sur l'option "Écraser la base de données existante".

De plus, les fichiers de la base de données seront nommés de manière cohérente avec le nouveau nom de la base de données et vous avez toujours la possibilité de modifier les noms de fichiers si vous le souhaitez.

10voto

Kbdavis07 Points 125

La vérification des options sur la base de données d'écriture a fonctionné pour moi :)

enter image description here

1voto

Tony Hopkinson Points 15160

Pensez-y comme à des archives. MyDB.Bak contient MyDB.mdf et MyDB.ldf.

La restauration avec déplacement vers HerDB récupère MyDB.mdf (et ldf) de la sauvegarde et les copie en HerDB.mdf et ldf.

Ainsi, si vous aviez déjà une MyDb sur l'instance de serveur vers laquelle vous effectuez la restauration, elle ne serait pas touchée.

0voto

Grant Points 1

Dans le script de la question, il manque juste la partie remplacer de sorte que la restauration script soit

RESTORE DATABASE myDB

 FROM DISK = 'C:\myDB.bak' ,

 WITH MOVE 'myDB_Data' TO 'C:\DATA\myDB.mdf',
,
MOVE 'myDB_Log' TO 'C:\DATA\myDB_log.mdf' ,  NOUNLOAD,  REPLACE,  STATS = 5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X