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 ~
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.
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.
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ù.