mdf файл не может быть перезаписан при восстановлении базы данных в SQL Server

21

У меня есть база данных A. В ней есть некоторые данные. Я создал резервную копию для A в виде файла A.bak . Затем я создаю новую пустую базу данных B. И затем я пытаюсь восстановить B из A.bak . Но SQL-сервер сообщает мне следующую ошибку:

Файл 'C: \ SQL Directory \ DATA \ A.mdf' не может быть перезаписан. Он используется базой данных «А».

Но если я удаляю A из SQL Server, восстановление в порядке.

Я не понимаю, почему SQL необходимо записать в исходный файл базы данных при восстановлении из отдельного файла резервной копии?

Благодаря ~

smwikipedia
источник

Ответы:

19

Если вы восстановите базу данных, SQL Server по умолчанию попытается восстановить все данные и файлы журналов в их исходные расположения. Поскольку эти исходные местоположения все еще используются исходной базой данных («A»), восстановление завершится неудачно. Вы должны использовать предложение WITH MOVE, чтобы указать новые местоположения для всех файлов в базе данных.

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

Как-то так или иначе. Используйте RESTORE FILELISTONLY FROM DISK ..., чтобы при необходимости увидеть логические имена файлов в резервной копии.

db2
источник
11

WITH MOVE/ MOVEявляется правильным решением в T-SQL.

Кстати, если вы хотите использовать графический интерфейс, вы можете перейти в Файлы и переименовать:

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

в

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

введите описание изображения здесь

Франческо Мантовани
источник
1
Кроме того, при изменении имени целевой базы данных на вкладке «Общие» графический интерфейс автоматически обновляет имена «Восстановить как» соответственно.
Wouter
0

При восстановлении резервной копии вы можете указать файлы данных для восстановления.

Посмотри здесь и здесь . Вы можете использовать опцию «Восстановить файлы базы данных как» и флаг «Перезаписать существующую базу данных».

Димас
источник
0

Используете ли вы параметр REPLACE, либо в команде TSQL, либо в качестве выбранного флажка? Кроме того, вы можете переименовать файлы и вызвать базу данных как-нибудь еще.

Вам также будет немного трудно восстановить базу данных, которая используется ..... вам нужно будет уничтожить процессы, используя базу данных; ИЛИ сначала удалите / удалите базу данных, закрыв соединения (это, вероятно, самое простое); ИЛИ установите базу данных, которую вы хотите перезаписать, в нечто вроде ограниченного пользовательского режима с немедленным откатом, так что, надеюсь, могут использовать только администраторы баз данных; ИЛИ даже остановите SQL Server и перезапустите его - мы надеемся, что восстановление начнется раньше, чем кто-либо / что-либо использует эту базу данных.

PS на всякий случай сделайте резервную копию базы данных, которую вы собираетесь перезаписать.

Питер Шофилд
источник
0

Если кто-то ищет решение в графическом интерфейсе Management Studio после использования Optionsстраницы и активации Overwrite the existing database (WITH REPLACE)опции:

Просто щелкните в Restore Asстолбце и измените имена файлов *.mdfфайла и *.ldfфайла.

январь
источник