web-dev-qa-db-fra.com

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

J'ai une base de données A. Elle contient des données. J'ai créé une sauvegarde pour A en tant que A.bak fichier. 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 SQL doit écrire dans le fichier de base de données original lors de la restauration à partir d'un fichier de sauvegarde séparé ?

Merci ~

22
smwikipedia

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.

20
db2

WITH MOVE/MOVE est la bonne solution dans 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

enter image description here

12

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

Cliquez simplement sur le Restore As colonne et modifiez les noms de fichiers de *.mdf fichier et le *.ldf fichier.

1
jan

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".

0
demas

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; OR supprimez/supprimez d'abord la base de données, fermant les connexions (c'est probablement la plus simple); OR définissez la base de données que vous souhaitez remplacer par quelque chose comme un utilisateur restreint) mode avec restauration immédiate, donc, espérons-le, seuls les administrateurs de bases de données peuvent utiliser; OR même arrêter SQL Server, et le redémarrer - 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ù.

0
Peter Schofield