3

我不小心删除了表中的一行并想恢复它。我在这里找到了解决方案:如何在 MS SQL 服务器中恢复已删除的记录

我试图从删除后的备份中恢复数据库。但我无法使用 STOPAT 选项恢复数据库:

RESTORE LOG database FROM  DISK = N'X:\database.BAK' WITH
STOPAT = N'2011-02-12T00:00:00', RECOVERY

我有以下错误:

Msg 3117, Level 16, State 4, Line 1
The log or differential backup cannot be restored because no files are
ready to rollforward.
Msg 3013, Level 16, State 1, Line 1
RESTORE LOG is terminating abnormally.
4

4 回答 4

8

我试图从删除后的备份中恢复数据库。

您无法从删除的备份中恢复已删除的记录。你需要:

  • 删除进行的最新完整备份
  • 从上次完整备份到删除的第一个日志备份之间进行的所有日志备份
  • 数据库必须处于完全恢复模式

您可能会引入差异备份以减少日志备份链的长度,但这是可选的。

只有满足以上所有条件,您才能继续执行该程序。如果您缺少上述任何一项,则该记录将丢失。根据经验,不要关注博客文章或论坛答案,包括这篇文章,而是关注产品文档:如何:恢复到时间点 (Transact-SQL)

于 2011-02-14T18:01:40.610 回答
3

如果您的数据库处于完全恢复模式,那么您可以尝试使用ApexSQL Log等商业工具或 DBCC LOG 或 fn_log 等 SQL 服务器命令读取事务日志并从那里恢复数据。

您也可以尝试查看这些帖子以获取更多详细信息:

如何撤消 SQL Server 2005 中的删除操作?

如何在 SQL Server 2008 中查看事务日志

于 2013-04-15T09:18:53.273 回答
2

取自此链接-

差异备份虽然只包含自上次完整数据库备份以来更改的数据页,但只能与类似于使用日志备份的完整备份一起恢复。您无法仅恢复单个表或对象,但您可以在数据库、文件组、文件和页面级别进行恢复。您还可以从任何备份还原到特定时间点(假设您已还原所需的先前完整、差异、日志)。

在这种情况下,对您来说最好的解决方案可能是使用不同的数据库名称恢复数据库,然后只将您想要的数据移动到现有数据库中?不确定这是否正是您想要实现的目标。

于 2011-02-14T13:34:27.510 回答
1

是的,可以使用各种方法从 SQL Server 数据库中恢复已删除的记录,但另一方面,这需要不同的先决条件。其中一些涉及本机 SQL Server 功能,另一些涉及第 3 方工具。

无论如何,在某些情况下,即使您的数据库未使用完整恢复模式,已删除的数据也不会丢失。有关详细信息,请查看从备份或在线数据库文件在线恢复已删除的 SQL 数据一文。

免责声明:我在 ApexSQL 担任产品支持工程师

于 2014-05-07T17:03:53.933 回答