le fichier mdf ne peut pas être remplacé lors de la restauration d'une base de données dans SQL Server

21

J'ai une base de données A. Elle contient des données. J'ai créé une sauvegarde pour A en tant que fichier A.bak . Ensuite, je crée une nouvelle base de données vide B. Et puis j'essaie de restaurer B à partir de A.bak . Mais le SQL Serve me dit l'erreur suivante:

Le fichier «C: \ SQL Directory \ DATA \ A.mdf» ne peut pas être remplacé. Il est utilisé par la base de données «A».

Mais si je supprime A de SQL Server, la restauration est correcte.

Je ne comprends pas pourquoi les besoins SQL pour écrire à l' origine le fichier de base de données lors de la restauration d'un séparé fichier de sauvegarde?

Merci ~

smwikipedia
la source

Réponses:

19

Si vous restaurez une base de données, SQL Server tentera, par défaut, de restaurer toutes les données et les fichiers journaux à leurs emplacements d'origine. Étant donné que ces emplacements d'origine sont toujours utilisés par la base de données d'origine ("A"), la restauration échoue. Vous devez utiliser la clause WITH MOVE pour spécifier de nouveaux emplacements pour tous les fichiers de la base de données.

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

Quelque chose comme ça de toute façon. Utilisez RESTORE FILELISTONLY FROM DISK ... pour voir les noms de fichiers logiques dans la sauvegarde si nécessaire.

db2
la source
11

WITH MOVE/ MOVEest la bonne solution T-SQL.

Soit dit en passant, si vous souhaitez utiliser l'interface graphique, vous pouvez aller dans Fichiers et renommer:

  • a.MDF
  • a.NDF
  • a.LDF

à

  • b.MDF
  • b.NDF
  • b.LDF

entrez la description de l'image ici

Francesco Mantovani
la source
1
De plus, lorsque vous modifiez le nom de la base de données de destination dans l'onglet Général, l'interface graphique mettra automatiquement à jour les noms de restauration en conséquence.
Wouter
0

Lorsque vous restaurez la sauvegarde, vous pouvez spécifier les fichiers de données à restaurer.

Regardez ici et ici . Vous pouvez utiliser l'option "Restaurer les fichiers de base de données sous" et l'indicateur "Remplacer la base de données existante".

demas
la source
0

Utilisez-vous l'option REMPLACER, soit dans la commande TSQL, soit en tant que case à cocher sélectionnée? Vous pouvez également renommer les fichiers et appeler la base de données autrement.

Vous aurez également du mal à restaurer sur une base de données utilisée ..... vous devrez tuer les processus utilisant la base de données; OU supprimez / supprimez d'abord la base de données, fermant les connexions (c'est probablement la plus simple); OU définissez la base de données que vous souhaitez remplacer dans quelque chose comme le mode utilisateur restreint avec restauration immédiate afin que, espérons-le, seuls les administrateurs de base de données puissent utiliser; OU même arrêtez SQL Server et redémarrez-le - espérons que la restauration démarre avant que quiconque / quoi que ce soit utilise cette base de données.

PS faire une sauvegarde de la base de données que vous êtes sur le point d'écraser, au cas où.

Peter Schofield
la source
0

Si quelqu'un recherche une solution dans l'interface graphique de Management Studio après avoir déjà utilisé la Optionspage et activé l' Overwrite the existing database (WITH REPLACE)option:

Cliquez simplement dans la Restore Ascolonne et modifiez les noms de fichier du *.mdffichier et du *.ldffichier.

Jan
la source