Назад | Перейти на главную страницу

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

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

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

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

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

Спасибо ~

Если вы восстанавливаете базу данных, 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

Во всяком случае, что-то в этом роде. Используйте ВОССТАНОВЛЕНИЕ ТОЛЬКО С ДИСКА ..., чтобы увидеть логические имена файлов в резервной копии, если это необходимо.

WITH MOVE / MOVE правильное решение в T-SQL.

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

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

к

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

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

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

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

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

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

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

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