За замовчуванням кожен RESTORE DATABASE
постачається з RECOVERY
налаштуванням. Параметри "NORECOVERY", в основному, повідомляють SQL Server, що база даних чекає більше файлів відновлення (це може бути DIFF- файл та LOG файл і, якщо можливо, може містити файл резервного копіювання хвостового журналу). Параметри "ВІДНОВЛЕННЯ", закінчіть усі транзакції та дозвольте базі даних готові здійснювати транзакції.
Тому:
- якщо ваша база даних налаштована за простою моделлю відновлення, ви можете виконати повне відновлення лише з
NORECOVERY
можливістю, коли у вас є резервна копія DIFF . Немає резервного копіювання LOG у SIMPLE базі даних моделі відновлення.
- В іншому випадку, якщо база даних налаштовані з ПОВНИМ або неповним протоколированием моделлю відновлення, ви можете виконати ПОВНЕ відновлення з наступною
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
З ЗАМОВЛЕННЯМ слід використовувати обережно, оскільки це може призвести до втрати даних
Або, якщо ви виконуєте резервну копію FULL та 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 з іншої машини для видачі команд). Я здогадуюсь, інші рішення також спрацювали б.