我不确定这是否可能是恢复数据的情况。设想:
我有一个每天插入 100 条数据的表。我没有意识到由于某种原因(后来被识别为代码中的错误),只要有与该过程无关的新记录,数据就会在同一天被删除进入表中。因此没有具体的删除时间。一周后(昨天)我们确定了这一点,我为该表添加了一个删除触发器并将数据存储到另一个表中。
问题是我怎样才能恢复过去一周删除的数据。我有每隔一小时备份一次的事务日志备份。在不知道数据被删除的具体时间的情况下,我该如何进行时间点恢复。任何恢复策略。
我不确定这是否可能是恢复数据的情况。设想:
我有一个每天插入 100 条数据的表。我没有意识到由于某种原因(后来被识别为代码中的错误),只要有与该过程无关的新记录,数据就会在同一天被删除进入表中。因此没有具体的删除时间。一周后(昨天)我们确定了这一点,我为该表添加了一个删除触发器并将数据存储到另一个表中。
问题是我怎样才能恢复过去一周删除的数据。我有每隔一小时备份一次的事务日志备份。在不知道数据被删除的具体时间的情况下,我该如何进行时间点恢复。任何恢复策略。
这将是一个艰巨的过程,但您也许可以使用
RESTORE WITH STANDBY
不同的实例。每条日志恢复后,都可以读取数据库中的数据。无法保证您要查找的行未在同一事务日志备份中添加和删除。恢复语句
附带说明(参考您关于每小时事务日志备份的声明),这种情况是我喜欢每分钟备份事务日志的原因之一。对真的。对于我的关键数据库。
这是一个使用
WITH STANDBY
.从它的声音来看,您没有一次不知道数据被删除的时间,您有多次数据会被删除。
但好消息!您有涵盖相关时间段的日志备份,所以这并非不可能。如果我遇到您的要求,我会执行以下操作。完全可以将此过程编写成脚本,但基本步骤是:
确定要恢复到的时间范围。每分钟,每 5 分钟,等等。您可以更小,例如每秒,但这会使剩下的过程变得痛苦。
将完整备份还原到新数据库(或另一台服务器上的相同数据库)。
将表的内容复制到另一个数据库中的不同表,导出,等等。
恢复完整备份,+首先将停止时间设置为您想要的时间。
转到第 3 步,直到获得所需的所有数据。
可能有第三方工具也可以为您执行此操作,我知道有些工具能够从本机备份中进行表级恢复。您可以将此策略与 Scott Hodgin 提到的 RESTORE WITH STANDBY 混合使用。
您好,我已经创建了每 1 分钟恢复一次的脚本,然后将数据复制到另一个数据库中的另一个表。
我使用游标循环遍历不同的事务日志文件,然后使用 while 循环每 1 分钟停止一次,然后恢复一个表。