Le jeu de sauvegarde contient une sauvegarde d'une base de données autre que celle existante

485

J'essaie de restaurer un fichier de sauvegarde SQL Server pour ma base de données, mais il génère une erreur comme suit:

Le jeu de sauvegarde contient une sauvegarde d'une base de données autre que celle existante

Ma base de données dans SQL Server 2008 et le fichier de sauvegarde est en 2005.

Quel peut être le problème?

RD
la source
95
La réponse très votée ci-dessous est un marteau pour casser une noix. Le problème est très probablement que vous n'avez pas sélectionné l' option " Remplacer la base de données existante (AVEC REMPLACER) " dans la fenêtre Restaurer> Options . J'ai eu ce problème à partir de la ligne de commande en utilisant WITH MOVEet a été résolu en utilisant WITH REPLACE, MOVE.
James McCormack
J'ai la même erreur avec l'une de mes bases de données, mais uniquement lorsque l'Agent SQL Server est désactivé. Si je l'allume, il n'y a pas d'erreur et je peux restaurer sans problème. Mon fichier BAK ne contient qu'une seule base de données et ce nom de base de données (et les noms de fichiers logiques) sont uniques sur mon serveur.
Webs des développeurs

Réponses:

807

Moi aussi, je suis tombé sur ce problème.

Solution :

  • Ne créez pas une base de données vide et restaurez-y le .bakfichier.
  • Utilisez l' option "Restaurer la base de données" accessible en cliquant avec le bouton droit sur la branche "Bases de données" de SQL Server Management Studio et indiquez le nom de la base de données tout en fournissant la source à restaurer.
  • Modifiez également les noms de fichiers dans "Fichiers" si l'autre base de données existe toujours. Sinon, vous obtenez "Le fichier '...' ne peut pas être écrasé. Il est utilisé par la base de données 'yourFirstDb'".
sunil_philip
la source
102
Ce serait si facile pour SSMS de me le dire lorsque l'erreur se produit
cja
16
+1 pour " Ne créez pas une base de données vide et restaurez-y le fichier .bak " ... oui, cela le résout. (Mais pourquoi n'ai-je pas eu ce problème toutes les autres fois où j'ai fait la même chose? Et n'avons-nous pas seulement commencé à faire cette pré-création en premier lieu comme solution de contournement pour un autre message d'erreur inexplicable?:])
Reg Edit
Quelqu'un devrait marquer cela comme une réponse car c'était le conseil dont j'avais besoin pour réussir la restauration d'une sauvegarde.
Doreen
2
Dans Restore Database, je suis allé dans Files, Restore As et j'ai mis des noms de fichiers uniques, car il y avait toujours les noms d'origine des données et des fichiers journaux.
Dave Mateer
2
Modifiez également les noms de fichiers dans "Fichiers" si l'autre base de données existe toujours. Sinon, vous obtenez "Le fichier '...' ne peut pas être écrasé. Il est utilisé par la base de données 'yourFirstDb'".
Verena Haunschmid
175

Soit:

1) À utiliser WITH REPLACElors de l'utilisation de la RESTOREcommande (si vous utilisez l'interface graphique, elle se trouve sous Options -> Remplacer la base de données existante ( WITH REPLACE)).

2) Deletel'ancienne base de données en conflit et restaurer à nouveau à l'aide de la RESTOREcommande.

Consultez le lien pour plus de détails.

Amarnath
la source
1
copié à partir du lien et a également fourni le lien .. * soupir * (intelligent)
Abhijeetchindhe
4
@Abhijeetchindhe haha ​​.. Réutilisation et courtoisie .. :)
Amarnath
:) Un logiciel honnête vous êtes! Quoi qu'il en soit, c'est la meilleure réponse à cette question. Et votez pour le temps que vous avez pris pour le trouver :)
Abhijeetchindhe
1
Eu le même problème que l'op et cette réponse fonctionne très bien. +1
Esteban
1
Cette option AVEC REMPLACEMENT était également la solution dont j'avais besoin. Merci!
Adam
90

Créez d'abord une base de données vierge du même nom. Ensuite, optez pour l'option de restauration

Sous Options dans le volet gauche n'oubliez pas de sélectionner

  • Écraser la base de données existante
  • Conserver les paramètres de réplication

entrez la description de l'image ici

C'est ça

HimalayanCoder
la source
51

Ont rencontré le même problème et trouvé la solution en faisant cela, en utilisant SSMS 2014

- Sélectionnez simplement l'option Remplacer la base de données existante (AVEC REMPLACEMENT) 

Base de données existante> Tâche> Restaurer> Base de données

Smit Patel
la source
34
USE [master];
GO

CREATE DATABASE db;
GO

CREATE DATABASE db2;
GO

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

RESTORE DATABASE db2
  FROM DISK = 'c:\temp\db.bak'
  WITH REPLACE,
  MOVE 'db' TO 'c:\temp\db2.mdf',
  MOVE 'db_log' TO 'c:\temp\db2.ldf';
Elsoni
la source
33

3 étapes simples:

1- Clic droit sur la base de données → Tâches → restaurer → Base de données

2- Vérifier Devicecomme source et localiser le fichier .bak (ou .bak zippé)

3- Dans le volet gauche, cliquez sur optionset:

  • check Écraser la base de données existante.
  • décochez Prendre la sauvegarde du journal de fin avant la restauration
  • cochez Fermer la connexion existante à la base de données de destination.

Les autres options sont vraiment optionnelles (et importantes bien sûr)!

Ali Sheikhpour
la source
23

C'est parce que les fichiers .mdfet .ldfde l'original Dbétaient situés à peut c:\programFile\....- être et ces informations sont enregistrées dans la sauvegarde!

Si vous créez la même base de données sur un autre serveur SQL Server sur lequel l'installation est effectuée, c:\program Files (x86)\ ....vous ne pouvez pas restaurer comme d'habitude. Vous devez déplacer le chemin d'accès aux fichiers .mdfet .ldf.

Donc:

  • Créer une base de données vide sur le nouveau serveur

  • Faites un clic droit sur la base de données vide> Tâches> Restaurer> Base de données> cliquez sur Périphérique sélectionnez vos .bakfichiers> Sélectionnez la base de données à restaurer dans

  • cliquez sur Fichiers à gauche> Sélectionnez "Déplacer tous les fichiers dans le dossier"
  • cliquez sur Options sur le site de gauche> cliquez sur Remplacer

Terminé!
J'espère que cela aide!

ASSISTANT
la source
16

J'avais rencontré un problème similaire aujourd'hui. J'ai essayé toutes les solutions ci-dessus mais n'a pas fonctionné. Postez donc ma solution ici.

N'oubliez pas de décocher Tail-long Backup avant la restauration

N'oubliez pas de décocher Tail-long Backup avant la restauration

J'espère que cela aidera les autres aussi!

immayankmodi
la source
C'est ce qui a fonctionné pour moi. Merci!
Bill Norman
16

Si vous utilisez l'approche de script et que vous avez une erreur concernant les fichiers LDF et MDF, vous pouvez d'abord interroger le fichier de sauvegarde pour les noms logiques (et d'autres détails) des fichiers dans le jeu de sauvegarde, en utilisant ce qui suit:

-- Queries the backup file for the file list in backup set, where Type denotes 
-- type of file. Can be L,D,F or S
-- info: https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-filelistonly-transact-sql
RESTORE FILELISTONLY FROM DISK = 'C:\Temp\DB_backup.bak'
GO

Vous obtiendrez des résultats similaires aux suivants:

entrez la description de l'image ici

Et puis vous pouvez utiliser ces noms logiques dans les requêtes:

    -- Script assumes you want MDF and LDF files restored on separate drives. Modify for your scenario
    RESTORE DATABASE DB 
    FROM DISK='C:\Temp\DB_backup.bak'
    WITH REPLACE,
      MOVE 'DB' TO 'E:\MSSQL\Data\DB.mdf', -- "DB" is the mdf logical name from query above
      MOVE 'DB_log' TO 'F:\MSSQL\Logs\DB.ldf'; -- "DB_log" is LDF logical name from query above

Vous RESTORE FILELISTONLY trouverez plus d'informations sur la documentation de SQL Server .

user919426
la source
J'ai eu le même problème dans la question, et dans mon cas, la sauvegarde Db provenait d'un serveur distant et j'ai dû créer la même structure de dossiers dans mon lecteur D qui ressemble à la sortie de la première requête. Ensuite, la deuxième requête a fonctionné correctement et la base de données a été restaurée.
rinilnath
11

Il est également important de vous assurer que le nom de votre base de données correspond au nom de la base de données dans la sauvegarde que vous essayez de restaurer. S'il ne correspond pas, vous obtiendrez la même erreur.

Andrew Marais
la source
Cela semble être particulièrement vrai si vous avez plusieurs fichiers / groupes de fichiers et tables partitionnées
AlexC
9

Avant de faire quoi que ce soit d'autre, vérifiez si votre sauvegarde est complète ou différentielle. Si vous essayez de créer une nouvelle base de données à partir d'une sauvegarde différentielle, peu importe ce que vous faites, vous rencontrerez l'erreur.

Tots Benedicto
la source
1
C'était le problème que je rencontrais, alors merci !!! (Je ne savais pas que le fichier de sauvegarde était en fait une sauvegarde différentielle.). Voici comment vérifier: "RESTORE HEADERONLY FROM DISK = 'C: \ myfile.bak'" Dans les résultats, BackupType de 1 = Sauvegarde complète. BackupType of 5 = Sauvegarde différentielle.
Wimpie Ratte
9

system.data.sqlclient.sqlerror: le jeu de sauvegarde contient une sauvegarde d'une base de données autre que la base de données 'Dbname' existante

Je suis tombé sur pour trouver soultion

  1. Ne créez pas de base de données avec le même nom ou un nom de base de données différent! Important.

  2. clic droit sur la base de données | Tâches> Restaurer> Base de données

  3. Sous "Source de restauration", sélectionnez "Depuis l'appareil"

  4. Sélectionnez le fichier .bak

  5. Cochez la case de la base de données dans la grille ci-dessous

  6. Vers DataBase: "Ici, vous pouvez saisir un nouveau nom de base de données" (Ex: DemoDB)

  7. Ne sélectionnez pas la base de données existante dans DropDownlist

  8. Maintenant, cliquez sur le bouton OK, il créera une nouvelle base de données et restaurera toutes les données de votre fichier .bak.

vous pouvez même obtenir de l'aide à partir de ce lien

J'espère que cela vous aidera à régler votre problème ...

akshay5662
la source
1
"Ne créez pas une base de données avec le même nom ou un nom de base de données différent! Important." Que voulez-vous dire?
sajid
6

Cela provoque toujours une incompatibilité de version. suivez ces étapes pour résoudre:

Étape 1: créez une base de données avec votre nom préféré. (Dans notre cas AdventureWorks)

Étape 2: Ecrire cliquez sur la base de données et cliquez sur Tâches >> Restaurer >> Base de données…

entrez la description de l'image ici

Étape 3: Sur l'écran de restauration, accédez à la troisième sélection d'options. Cochez maintenant la case «Remplacer la base de données existante (AVEC REMPLACEMENT)»

entrez la description de l'image ici

Étape 4: cliquez sur OK. Il devrait réussir à restaurer la base de données.

Remarque: lorsque vous restaurez une base de données AVEC REMPLACEMENT, elle écrase l'ancienne base de données.

Alireza Abdollahnejad
la source
Merci Alireza pour votre effort .. Mais nous utilisons la requête au lieu de l'interface graphique.
Pugal le
5

Même problème avec moi, la solution pour moi est:

  1. Faites un clic droit sur la base de données.
  2. Sélectionnez des tâches, sélectionnez restaurer la base de données.
  3. Cliquez sur les options sur le côté gauche.
  4. Cochez la première option Écraser la base de données existante (AVEC REMPLACER).
  5. Accédez à Général, sélectionnez la base de données source et de destination.
  6. Cliquez sur OK, c'est tout
Aayush Verma
la source
3

J'essayais juste de résoudre ce problème.

J'avais tout essayé, de l'exécution en tant qu'administrateur aux suggestions trouvées ici et ailleurs; ce qui a résolu pour moi à la fin était de cocher l'option "relocaliser les fichiers" dans l'onglet Propriétés des fichiers.

J'espère que cela aide quelqu'un d'autre.

Clint
la source
3

J'ai dû créer une nouvelle base de données sur mon local pour les tests et j'ai eu une sauvegarde de ma prod. J'ai d'abord créé la base de données et j'ai essayé d'exécuter le BAK sur la nouvelle base de données, ce qui a produit cette erreur pour moi. J'ai supprimé la base de données et je l'ai restaurée tout en recherchant le nouveau nom de la base de données dans l'écran de restauration lui-même. La base de données a été créée automatiquement lors de la restauration.

Angelina Ilieva
la source
3

Certains d'entre vous ont beaucoup trop compliqué cela. J'ai trouvé que c'était extrêmement simple.

1) Créez une base de données portant le même nom que le nom de votre base de données de fichiers .bak!

2) faites un clic droit sur la base de données | Tâches> Restaurer> Base de données

3) Sous "Source de restauration", sélectionnez "Depuis l'appareil"

4) Sélectionnez le fichier .bak

5) Cochez la case de la base de données dans la grille ci-dessous

6) Sous "Sélectionner une page" à droite, sélectionnez "Options"

7) Cochez la case intitulée "Conserver les paramètres de réplication (AVEC KEEP_REPLICATION)

Maintenant, revenez à la page Général et cliquez sur OK pour restaurer la base de données ... C'est tout.

Rolon
la source
où est "sélectionner une page"?
KansaiRobot
2

J'ai fait le travail de manière alternative, en utilisant des scripts Generate. Cela a fonctionné pour moi car la sauvegarde-restauration n'a pas aidé à résoudre le problème en raison de la même erreur.

Altaf Patel
la source
2

Dans les options, remplacez le nom de fichier "Restore As" par la nouvelle base de données mdf et ldf. Il fait référence aux fichiers .mdf et .ldf de la base de données source.

Priyanka Rawat
la source
1

Vous pouvez restaurer dans une nouvelle base de données, vérifier la syntaxe du nom de fichier, il sera dans le fichier journal, pour la nouvelle version SQL ll sera un suffixe "_log"

annonce vérifier le remplacement de l'indicateur de base de données existant dans l'onglet d'option

Fabio

Fabio
la source
0

Je suis sûr que ce problème est lié aux autorisations des fichiers et des dossiers.

Popas
la source
0

J'essayais de restaurer une base de données de production dans une base de données intermédiaire sur le même serveur.

La seule chose qui a fonctionné dans mon cas a été de restaurer une nouvelle base de données vierge. Cela a très bien fonctionné, n'a pas essayé d'écraser les fichiers de production (ce qui serait le cas si vous restaurez simplement le fichier de sauvegarde de la production dans la base de données intermédiaire existante). Ensuite, supprimez l'ancienne base de données et renommez - les fichiers conserveront le nouveau nom temporaire, mais dans mon cas, ça va.

(Ou sinon, supprimez d'abord la base de données intermédiaire, puis vous pouvez restaurer vers une nouvelle base de données portant le même nom que la base de données intermédiaire)

Mike Nelson
la source
0

au lieu de cliquer sur Restaurer la base de données, cliquez sur Restaurer le fichier et les groupes de fichiers.

ça marche sur mon serveur sql

Ali Sadri
la source
0

Cela m'a aidé à importer le fichier de sauvegarde à partir du lecteur système

  1. Créez une base de données avec le même nom (de préférence) que le nom de votre base de données de fichiers .bak
  2. Cliquez avec le bouton droit sur la base de données> Tâches> Restaurer> Base de données
  3. Sous "Source de restauration", sélectionnez "Depuis l'appareil"
  4. Sélectionnez le fichier .bak en sélectionnant le chemin du système
  5. Cochez la case de la base de données dans la zone de liste ci-dessous
  6. Sous "Sélectionner une page" à droite, sélectionnez "Options"
  7. Cochez la case intitulée "Conserver les paramètres de réplication (AVEC KEEP_REPLICATION)
  8. Cochez la case Remplacer la base de données existante (AVEC REMPLACER) Maintenant Revenez à la page Général et cliquez sur OK pour restaurer la base de données ...
Prajwal Bhat
la source