web-dev-qa-db-fra.com

Erreur 3154 lors de la restauration d'une sauvegarde à l'aide de WITH REPLACE

J'ai installé SQL 2012 avec SP1 sur mon ordinateur. J'ai fait une sauvegarde d'une base de données test.bak.

J'ai une base de données avec le nom test2 qui est la même base de données, mais les données ont changé.

Je veux restaurer test.bak plus de test2 base de données.

Je reçois toujours l'erreur:

Erreur 3154: le jeu de sauvegarde contient une sauvegarde d'une base de données autre que la base de données existante.

J'ai essayé:

  1. J'ai cliqué à droite sur test2 -> Restore database -> From device

    J'ai choisi test.bak et vérifié With Replace mais je reçois l'erreur.

  2. J'ai ensuite essayé de cliquer avec le bouton droit sur test2 -> Restore file and filegroups

    J'ai choisi test.bak et vérifié With Replace mais je reçois l'erreur.

Je peux supprimer mon ancienne base de données, puis restaurer ma sauvegarde avec le bon nom, mais lorsque j'utilisais SQL 2008, je n'ai eu aucun problème à restaurer une base de données existante.

Il semble que depuis que j'utilise SQL2012, je reçois beaucoup cette erreur!

16

Tu devrais utiliser WITH REPLACE et en général évitez d'utiliser les trucs pointer-cliquer dans Management Studio - ils sont inflexibles et ont souvent des bugs.

Cela a fonctionné pour moi:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

BACKUP DATABASE test TO DISK = 'c:\temp\test.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

Vous devez également vous assurer que lorsque vous sauvegardez des bases de données, vous utilisez WITH INIT et/ou ne pointez pas l'appareil vers un fichier qui contient déjà une sauvegarde (car il ne s'agit peut-être pas de la même base de données que vous sauvegardez maintenant - surtout si vous réutilisez des noms comme test... ).

12
Aaron Bertrand

Comme indiqué, la bonne réponse consiste à utiliser le WITH REPLACE option.

Je veux juste souligner que vous pouvez obtenir l'erreur dans la question même lorsque vous utilisez WITH REPLACE, si vous essayez de restaurer à partir d'une sauvegarde différentielle (sans la sauvegarde complète).

2
Brimstedt

Vous pouvez toujours le faire, mais cela nécessite une étape supplémentaire.

Ouvrez la boîte de dialogue de restauration, faites vos sélections habituelles selon les habitudes de 2008. Si la base de données d'origine est DB, choisissez le périphérique DB.bak pour la source et remplacez le nom de destination par DBTest. Ensuite, sous Sélectionnez une page (coin supérieur gauche), où vous voyez Général/Fichiers/Options - choisissez Fichiers. Regardez dans la grille. Vous verrez des colonnes pour le nom de fichier d'origine et la restauration en tant que nom de fichier. Élargissez manuellement ce dernier et saisissez le nouveau nom (si le nom d'origine de la base de données est DB et que vous souhaitez créer DBTest, puis changez ....\DB.mdf en ...\DBTest.mdf, etc.)

Cela acceptera votre fichier .bak pour DB comme source et DBTest comme destination. Vous devrez peut-être également accéder à la page Options et choisir Avec remplacer. Je dois le faire pour d'autres raisons, donc je ne peux pas le tester sans cette option.

2
Debby

Vous restaurez la mauvaise base de données. Ne pensez pas à cela comme "restauration test2 avec une sauvegarde de test ", pensez à" restaurer ma sauvegarde de test mais renommez-la en test2 ". Vous pouvez choisir la tâche de restauration dans test et mettre test2 dans le champ "Vers la base de données:".

Comme Aaron le mentionne, apprenez le script plutôt que de vous fier à l'assistant - il est plus clair de savoir ce qui se passe où.

2
SQLFox

1) Utilisez WITH REPLACE en utilisant la commande RESTORE.

2) DROP l'ancienne base de données qui est en conflit et restaurer à nouveau en utilisant la commande RESTORE.

Il n'y a aucun problème avec la version de SQL Server. Comme l'a souligné Aaron, je peux également restaurer la base de données de 2008 à 2012 et les mêmes versions également.

2
Kin Shah

J'espère que cela fonctionnera.

  1. Une fois que vous avez défini le chemin d'accès pour restaurer le fichier.
  2. Cliquez sur "Options" sur le côté gauche.
  3. Cochez la case - "Fermer les connexions existantes à la base de données de destination".
  4. Cliquez sur OK. enter image description here
0
Vinu M Shankar