默认情况下,每个RESTORE DATABASE
都带有RECOVERY
设置。“ NORECOVERY”选项基本上告诉SQL Server数据库正在等待更多的还原文件(可以是DIFF文件和LOG文件,并且如果可能的话,可以包括尾日志备份文件)。“恢复”选项完成所有事务,并让数据库准备执行事务。
所以:
- 如果您的数据库是使用SIMPLE恢复模型设置的,则只有具有DIFF备份时,才可以使用选项执行FULL Restore 。没有LOG备份被允许在SIMPLE恢复模型的数据库。
NORECOVERY
- 否则,如果你的数据库设置了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
希望能有所帮助。
DROP DATABASE db
通过SSMS 发出了命令,该命令起作用了(之前我是从另一台计算机上使用SSMS发出命令的)。我猜想其他解决方案也会奏效。