У меня есть база данных А. В ней есть некоторые данные. Я создал резервную копию для 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
.
Кстати, если вы хотите использовать графический интерфейс, вы можете перейти к Файлы и переименуйте:
к
Если кто-то ищет решение в графическом интерфейсе Management Studio после использования Options
страница и активация Overwrite the existing database (WITH REPLACE)
вариант:
Просто нажмите на Restore As
столбец и измените имена файлов *.mdf
файл и *.ldf
файл.
При восстановлении резервной копии вы можете указать файлы данных для восстановления.
Смотреть Вот и Вот. Вы можете использовать опцию «Восстановить файлы базы данных как» и флаг «Перезаписать существующую базу данных».
Используете ли вы опцию REPLACE в команде TSQL или в качестве установленного флажка? Как вариант, вы можете переименовать файлы и назвать базу данных по-другому.
Вы также столкнетесь с небольшими трудностями при восстановлении через базу данных, которая уже используется ... вам нужно убить процессы, использующие базу данных; ИЛИ сначала удалите / удалите базу данных, закрыв соединения (это, вероятно, самый простой способ); ИЛИ установите базу данных, которую вы хотите перезаписать, в что-то вроде ограниченного пользовательского режима с немедленным откатом, поэтому, надеюсь, только администраторы баз данных могут использовать; ИЛИ даже остановите SQL Server и перезапустите его - надеюсь, восстановление будет запущено до того, как кто-либо / что-нибудь будет использовать эту базу данных.
PS на всякий случай сделайте резервную копию базы данных, которую собираетесь перезаписать.