我已经执行了这两个命令。
USE master
GO
RESTORE DATABASE test
FROM Kingston
WITH NORECOVERY
GO
USE master
GO
RESTORE LOG test
FROM Kingston
WITH STOPAT = '2020-05-13 14:05:25', RECOVERY;
GO
但现在当我用这两条命令访问数据库时,我得到了这样的错误信息 USE test GO
:
数据库'test'无法打开。它正在进行还原。
而它显然不是。有什么建议可以解决吗?目前发现 RECOVERY
帮助,但你可以看到它没有。
编辑
改变 NORECOVERY
到 RECOVERY
没有帮助,因为我无法执行第二条命令(抛出错误),我需要在特定时刻的日志。
编辑
我已经找到了解决方案。你需要额外的命令。
RESTORE DATABASE test
WITH RECOVERY
GO
看来 RECOVERY
忽略了 RESTORE LOG
命令,它需要额外的命令来确认还原已经完成。但我很感激你的帮助。
这个
USE master
GO
RESTORE LOG test
FROM Kingston
WITH STOPAT = '2020-05-13 14:05:25', RECOVERY;
如果STOPAT时间超出日志备份中的时间范围,将不执行恢复。 这允许您为多个日志备份指定STOPAT,只有当您应用了包含目标时间的日志备份时,数据库才会运行恢复。
从文档中可以看出。
RECOVERY和STOPAT选项: 如果事务日志备份不包含所请求的时间(例如,如果指定的时间超过了事务日志所覆盖的时间结束),则会生成一个警告,数据库仍然无法恢复。
出现这个错误的原因是你使用了NORECOVERY模式进行恢复,它不允许使用数据库。现在你应该使用with RECOVERY模式来恢复数据库,这样你就可以轻松地访问数据。
为了纠正这个常见的错误,你需要使用WITH RECOVERY选项。请按照以下步骤进行操作。
- T-SQL脚本恢复数据库与RECOVERY 。
RESTORE DATABASE Databasename FROM DISK = 4'C:\databasename.BAK'
WITH RECOVERY
如果数据库处于还原状态,用户无法访问,请运行该命令使用户可以访问。
RESTORE DATABASE Databasename WITH RECOVERY
如果用户有多个备份,除了最后一个备份外,用户可以使用NORECOVERY选项来恢复数据库。但对于最后一次备份,用户必须使用WITH RECOVERY选项来恢复所有的交易日志,并将数据库上线。
RESTORE DATABASE databasename FROM DISK = 'C:\Databasename.BAK'
WITH NORECOVERY
GO
RESTORE LOG databasename FROM DISK = 'C:\Databasename.TRN'
WITH RECOVERY
GO