По умолчанию каждый RESTORE DATABASE
поставляется с RECOVERY
настройкой.
Параметры 'NORECOVERY', в основном, сообщают SQL Server, что база данных ожидает больше файлов восстановления (это может быть файл DIFF и файл LOG и может включать файл резервной копии хвостового журнала , если возможно).
Опции 'RECOVERY' завершают все транзакции и позволяют базе данных быть готовой к выполнению транзакций.
Итак:
- если ваша база данных настроена на модель восстановления SIMPLE , вы можете выполнить восстановление FULL с параметром
NORECOVERY
только при наличии DIFF резервное копирование. Нет LOG резервное копирование разрешено в SIMPLE модель восстановления базы данных.
- В противном случае, если ваша база данных настроена на модель восстановления FULL или BULK-LOGGED , вы можете выполнить восстановление FULL с последующим параметром
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 следует использовать с осторожностью, так как это может привести к потере данных
Или, если вы выполняете полное и разностное резервное копирование, вы можете использовать это
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
Надеюсь, это поможет.