如何回滚已删除的表格数据?

我已经意外删除了一个表,我该如何回滚。 请build议。

从备份中获取它!

正如Joe Stefanelli所说,ApexSQL工具可以提供帮助。 实际上有两个工具 – 如果整个表被删除 – ApexSQL恢复。 如果只删除表logging,ApexSQL日志和ApexSQL恢复可以帮助。

在试用期间,这两种工具的局限性在于它们只能恢复10次交易中的1次。 好消息是,ApexSQL日志即使在审判中也显示网格中的所有logging,因此您可以看到可以恢复的logging。 限制是,在许可工具之前,您无法为其全部创build撤消脚本

这些工具可以恢复数据,即使在读取数据(MDF)文件(ApexSQL Recover)和事务日志(LDF和trn – 联机,分离,备份 – ApexSQL Log)时没有完整或差异数据库备份,

由于DROP表操作,用于恢复丢失表的4种技术

免责声明:我作为支持工程师在ApexSQL工作

如果你没有一个好的备份,你可以给ApexSQL等第三方工具试一试。 我不知道免费试用版的限制是什么,但可能值得一试。

如果有备份,则按照如何从SQL Server中的数据库备份或事务日志备份检索特定的一个或多个表中所述的过程:

  • 备份当前的事务日志
    使用NO_TRUNCATE选项备份当前事务日志。

  • 还原部分或完整数据库备份
    SQL Server 2000或SQL Server 2005如果您的备份策略包含文件组备份,则可以将部分数据库还原执行到其他位置,并仅还原包含要检索的表的数据库部分。 有关如何将数据库还原到其他名称和位置的详细信息,请参阅以下参考: 如何将文件还原到新位置(Transact-SQL)

  • 使用STOPAT选项还原事务日志备份
    将事务日志备份还原到部分或完整数据库还原,并在表或多行删除之前停止。 使用RESTORE LOG命令的STOPAT选项停止事务日志还原,并在表被删除之前恢复数据库。 请参阅如何恢复到某个时间点

  • 检索数据
    还原数据库后,可以使用INSERT,Bcp(批量复制实用程序)或SELECT INTO将表或多个行复制回原始数据库。 …

  • DBCC CHECKTABLE
    在新表上运行DBCC CHECKTABLE Transact-SQL引用来validation数据的完整性。

我省略了详细信息,您可以按照知识库文章的链接了解相关主题。

有几个人提到了第三方工具。 Toad by Quest中唯一一个我曾经亲自用过交易日志回放的运气。 这不是很便宜,但如果重要的话,这是一个生活的节省。 我们有一些写得不好的Web应用程序,它们被SQL注入攻击,并破坏了一些旧的DB。 攻击没有真正的问题,但我们想看看他们正在执行什么代码,所以能够读回T-LOG是非常方便的。

我们已经备份了,我已经完成了。无论如何,我们可以使用数据库日志来回滚最近的删除。 – Simhadri

您可能需要研究事务日志重放策略 。

在SQL Server中恢复已删除表数据的另一个有用方法是使用fn_dblog()函数。

use mydatabase go SELECT [Current LSN], [Transaction ID], Operation, Context, AllocUnitName FROM fn_dblog(NULL, NULL) WHERE Operation = 'LOP_DELETE_ROWS' 

但是使用fn_dblog()函数恢复数据的方法过长,但查看已删除的表logging可能会有帮助。