Вот сценарий, который пытается сделать ежедневную резервную копию предыдущего дня и восстановить ее через базу данных отчетов. Моя проблема в том, как мне настроить переопределение файлов, чтобы мне не нужно было указывать имена файлов? Когда я запускаю это, я сталкиваюсь с рядом ошибок, как показано ниже.
----Restore Database
ALTER DATABASE ReportingDB SET SINGLE_USER
GO
DECLARE @filename VARCHAR(1000)
select @filename = 'F:\DailyBackup\LiveDB_backup_' + cast(datepart(yyyy, getdate()) as varchar(4)) + '' + substring(cast( 100 + datepart(mm, getdate()) as char(3)), 2, 2) + substring(cast( 100 + datepart(day, getdate()) as char(3)), 2, 2) + '0000.bak'
select @filename
RESTORE DATABASE ReportingDB FROM DISK = @filename WITH REPLACE
GO
ALTER DATABASE ReportingDB SET MULTI_USER
GO
(1 row(s) affected)
Msg 5133, Level 16, State 1, Line 4
Directory lookup for the file "D:\DB\LiveDB.mdf" failed with the operating system error 21(error not found).
Msg 3156, Level 16, State 3, Line 4
File 'LiveDB' cannot be restored to 'D:\DB\LiveDB.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Line 4
Directory lookup for the file "D:\DB\LiveDB_log.LDF" failed with the operating system error 21(error not found).
Msg 3156, Level 16, State 3, Line 4
File 'LiveDB_log' cannot be restored to 'D:\DB\LiveDB_log.LDF'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 4
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 4
RESTORE DATABASE is terminating abnormally.
Когда я пытаюсь С ДВИЖЕНИЕМ:
ПЕРЕМЕСТИТЕ 'LiveDB' В 'F: \ ReportingDB \ ReportingDB.mdf',
ПЕРЕМЕСТИТЕ "LiveDB_log" В "F: \ ReportingDB \ ReportingDB_log.ldf"
(1 row(s) affected)
Msg 1834, Level 16, State 1, Line 4
The file 'F:\ReportingDB\ReportingDB.mdf' cannot be overwritten. It is being used by database 'ReportingDB'.
Msg 3156, Level 16, State 4, Line 4
File 'LiveDB' cannot be restored to 'F:\ReportingDB\ReportingDB.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 1834, Level 16, State 1, Line 4
The file 'F:\ReportingDB\ReportingDB_log.ldf' cannot be overwritten. It is being used by database 'ReportingDB'.
Msg 3156, Level 16, State 4, Line 4
File 'LiveDB_log' cannot be restored to 'F:\ReportingDB\Reporting_log.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 4
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 4
RESTORE DATABASE is terminating abnormally.
Похоже, ваша исходная резервная копия была взята из базы данных, расположенной по адресу 'D:\DB\LiveDB.mdf'
и теперь вы пытаетесь восстановить базу данных, расположенную по адресу 'F:\ReportingDB\ReportingDB.mdf'
, поэтому вам понадобится комбинация опций MOVE и REPLACE.
RESTORE DATABASE ReportingDB
FROM DISK = @filename WITH REPLACE,
MOVE 'LiveDB' TO 'F:\ReportingDB\ReportingDB.mdf',
MOVE 'LiveDB_log' TO 'F:\ReportingDB\ReportingDB_log.ldf'
Вам нужен REPLACE
вариант
RESTORE DATABASE ReportingDB FROM DISK = @filename, REPLACE
Видеть документация Больше подробностей
Сообщение 1834, уровень 16, состояние 1, строка 4 Файл «F: \ ReportingDB \ ReportingDB.mdf» не может быть перезаписан. Он используется базой данных ReportingDB.
Вышеупомянутая ошибка, вероятно, связана с тем, что база данных используется при попытке восстановления. Это предотвратит восстановление базы данных как таковую, используйте следующую команду
ALTER DATABASE DATABASENAME SET SINGLE_USER С НЕМЕДЛЕННЫМ ОТКАТОМ
ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ
Обратите внимание, что это должно быть все за один шаг, если вы выполняете запланированное задание.
Это заставит всех других пользователей отключиться (поэтому их отчеты не будут работать, если они будут запущены)
вам также может потребоваться включить следующие
ALTER DATABASE DATABASENAME SET MULTI_USER
чтобы впоследствии разрешить несколько подключений, хотя при восстановлении он должен быть таким же, как и в базе данных, из которой было выполнено резервное копирование.