По умолчанию каждый RESTORE DATABASE
поставляется с RECOVERY
настройкой. Параметры 'NORECOVERY', в основном, говорят SQL Server, что база данных ожидает больше файлов восстановления (это может быть файл DIFF и LOG и, если возможно, файл резервной копии). Опции 'RECOVERY' завершают все транзакции и позволяют базе данных быть готовой к выполнению транзакций.
Так:
- если ваша база данных настроена на модель восстановления SIMPLE , вы можете выполнить полное восстановление с
NORECOVERY
опцией, только если у вас есть резервная копия DIFF . В базе данных модели восстановления SIMPLE не допускается резервное копирование LOG .
- В противном случае, если ваша база данных настроена с моделью восстановления FULL или BULK-LOGGED , вы можете выполнить полное восстановление, а затем
NORECOVERY
параметр, а затем выполнить DIFF. последующим NORECOVERY
и, наконец, выполнить восстановление LOG с RECOVERY
параметром.
Помните, что последний запрос на восстановление должен иметь RECOVERY
вариант . Это может быть явный способ или нет. В терминах T-SQL ситуация:
1.
USE [master]
GO
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD,
RECOVERY -- This option could be omitted.
GO
Параметр WITH REPLACE следует использовать с осторожностью, так как это может привести к потере данных
Или, если вы выполняете полное и DIFF резервное копирование, вы можете использовать это
USE [master]
GO
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1,
NOUNLOAD,NORECOVERY
GO
RESTORE DATABASE Database_name
FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1,
NOUNLOAD, RECOVERY
GO
2. USE [master]
GO
-- Perform a Tail-Log backup, if possible.
BACKUP LOG Database_name
GO
-- Restoring a FULL backup
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1,
NOUNLOAD,NORECOVERY
GO
-- Restore the last DIFF backup
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
NORECOVERY,NOUNLOAD
GO
-- Restore a Log backup
RESTORE LOG Database_name
FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
RECOVERY, NOUNLOAD
GO
Конечно, вы можете выполнить восстановление с опцией STATS = 10 который указывает SQL Server сообщать о завершении каждых 10%.
Если вы предпочитаете, вы можете наблюдать за процессом или восстановить в режиме реального времени на основе запроса. Следующим образом:
USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO
Надеюсь, это поможет.
DROP DATABASE db
команду через SSMS, и она работала (ранее я использовал SSMS с другого компьютера для выдачи команд). Я предполагаю, что другие решения работали бы также.