如何找回一些已删除的记录?


Answers:


116

您的数据库是否处于完全恢复模式?

  • 如果是,您是否正在执行事务日志备份?

    • 如果是,您是否具有Quest LiteSpeed,Red Gate SQL Backup或Idera SQLSafe之类的备份实用程序?
      • 如果是的话,这些实用程序可以取消删除备份文件中的对象(包括完整文件和事务日志),但是解释如何使用这些对象超出了我在这里可以做的范围。请与供应商联系以获取指示。
      • 如果否,请使用其他名称将完整备份和事务日志还原为数据库。(不要覆盖现有数据库。)在删除发生之前,您将可以获得对象的最新副本,但是您需要使用restore命令的stopat部分来指定何时停止恢复命令。您需要先停止操作,然后再进行删除。
    • 如果不是,请获取诸如Quest LiteSpeed或Apex SQL Log之类的日志读取器实用程序的副本。这些实用程序可以连接到数据库服务器,检查日志文件,并帮助您撤消事务。我不确定演示版本是否可以使用,但是付费版本肯定可以。
  • 如果为否(不在完全恢复模式下),请使用不同的名称将上次完全备份还原为数据库。(不要覆盖您已经拥有的数据库。)从那里,您将能够还原备份时联机的任何记录,但是此后您将丢失所有更改。


4
很好的答案,我要补充一点,如果您具有审计或变更跟踪功能,那么通常只在受影响的一个表中才最容易从那些表中取回数据。当然,如果您对上述部分或全部答案是否定的,则在尽可能多地还原记录之后,请修复备份过程,并确定谁可以访问生产数据。
HLGEM'3

如果您处于简单模式,则某些页面上实际仍可能存在这些行。也许其中一些可以恢复(花费非常高的时间和/或金钱成本)。
usr

仅供参考。ApexSQL恢复除了时间的限制,评估版仅恢复1,每10行可用于恢复总行的(apexsql.com/faqs/faqs_recover.aspx
萨米尔

30

SQL Server为每个已删除的记录保留日志。您可以通过fn_dblogSQL Server函数查询这些日志。

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

但是此日志为十六进制格式,您需要将此十六进制格式转换为实际数据。

以下文章将帮助您以上面定义的方式恢复已删除的记录:

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/


3
这很酷。这种方法在什么条件下有效(或无效)?
Nick Chammas,

3
@NickChammas-它只能恢复活动日志中的内容,因此对于简单的恢复模型,一定不会出现检查点。另外,当前看来,它在具有快照隔离的数据库中无法正常工作,但这应该很容易解决。@user1059637-您对人们向您的代码添加功能的态度如何?
马丁·史密斯,

@MartinSmith,现在它也可以完美地与快照隔离一起使用。
user1059637 2011年

22

不幸的是,如果没有更多信息,我们将无法为您提供帮助。但是从您的问题中,我看到您已经从数据库中删除了似乎是200万条记录的内容。除非您已完全登录数据库并购买了一些非常特定的工具,否则很可能无法恢复此信息。

如果您可以更详细地描述您认为自己已经完成的工作,以及为什么感觉无法收回记录并可以描述数据库的组织,那么我们可能会为您提供更多帮助。

一些一般性建议:如果您认为已经删除了200万条记录,那么您现在可能会感到有些惊讶。因此,您应该休息五分钟,冷静下来,然后重新检查问题。另外,您应该立即告诉老板是否合理(不要在凌晨2点叫醒别人来告诉他们)并且您正在制定解决方案。最好是承认发生了什么,而不是疯狂地尝试恢复并可能使情况变得更糟并隐藏细节。知道老板可以以某种方式帮助您,可以帮助您解决问题。就像我说的,只是一些一般性建议。


10
休息5分钟是个好主意。一直有效。有助于集中精力。:-) 去过也做过。
约翰aka hot2use 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.