mdf-файл не може бути перезаписаний під час відновлення бази даних на SQL Server


21

Я отримав базу даних A. У ній є деякі дані. Я створив резервну копію для файлу A як A.bak . Потім я створюю нову порожню базу даних B. І тоді я намагаюся відновити B з A.bak . Але SQL Serve скажіть мені таку помилку:

Файл "C: \ SQL Directory \ DATA \ A.mdf" неможливо перезаписати. Він використовується в базі даних "A".

Але якщо я видаляю A з SQL Server, перезавантаження буде нормальним.

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

Спасибі ~

Відповіді:


19

Якщо ви відновите базу даних, SQL Server за замовчуванням спробує відновити всі дані та файли журналів у їх початкові місця. Оскільки ці вихідні місця все ще використовуються оригінальною базою даних ("A"), відновлення не вдається. Вам потрібно скористатись пунктом ЗОВ'ЯЗАННЯ, щоб вказати нові місця для всіх файлів у базі даних.

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

Щось подібне все одно. Використовуйте ЗАВДАННЯ ВІДПОВІДНО З ДИСКА ..., щоб побачити логічні назви файлів у резервній копії, якщо це необхідно.


11

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

До речі, якщо ви хочете використовувати графічний інтерфейс, ви можете перейти до Файли та перейменувати:

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

до

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

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


1
Також при зміні імені бази даних призначення на вкладці Загальне графічний інтерфейс автоматично оновить імена Відновити як.
Wouter

0

Під час відновлення резервного копіювання ви можете вказати файли даних для відновлення.

Подивіться сюди і сюди . Можна скористатися опцією "Відновити файли бази даних як" та прапором "Перезаписати існуючу базу даних".


0

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

Також вам буде важко відновити базу даних, яка використовується ..... вам потрібно буде вбити процеси за допомогою бази даних; АБО спочатку видаляйте / видаляйте базу даних, закриваючи з'єднання (це, мабуть, найпростіше); АБО встановіть базу даних, яку ви хочете перезаписати, у щось на кшталт обмеженого користувальницького режиму з негайним відкатом, тому, сподіваємось, можуть використовувати лише DBA; АБО навіть зупиніть SQL Server та перезапустіть його - сподіваємось, що відновлення прокручується раніше, ніж хтось або що-небудь використовує цю базу даних.

PS візьміть резервну копію бази даних, яку ви збираєтеся перезаписати, про всяк випадок.


0

Якщо хтось шукає рішення в графічному інтерфейсі Management Studio після того, як вже скористався Optionsсторінкою та активував Overwrite the existing database (WITH REPLACE)опцію:

Просто натисніть на Restore Asстовпчик та змініть назви *.mdfфайлу та *.ldfфайлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.