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é:
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.
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!
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
... ).
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).
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.
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ù.
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.