默认情况下,每个RESTORE DATABASE
都带有RECOVERY
设置。'NORECOVERY' 选项基本上告诉 SQL Server 数据库正在等待更多的恢复文件(可能是DIFF文件和LOG文件,并且可能包括尾日志备份文件,如果可能的话)。'RECOVERY' 选项,完成所有事务并让数据库准备好执行事务。
所以:
- 如果您的数据库设置为使用简单恢复模式,则只有当您有DIFF备份时,您才能使用选项执行FULL恢复。SIMPLE恢复模型数据库中不允许有LOG备份。
NORECOVERY
- 否则,如果您的数据库设置为FULL或BULK-LOGGED恢复模式,您可以执行FULL恢复
NORECOVERY
,然后执行 option,然后执行DIFF ,然后执行NORECOVERY
,最后,执行LOG恢复RECOVERY
选项。
请记住,最后的恢复查询必须有RECOVERY
OPTION。这可能是一种明确的方式,也可能不是。在T-SQL的Therms中,情况:
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 选项,因为它可能导致数据丢失
或者,如果您执行 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
希望这有帮助。