2

我不小心在错误的表上执行了 TRUNCATE 命令,我的所有数据都消失了。我们确实有一个备份,但它是 2 周前的,并且没有所有最新数据。

有什么想法我们如何回滚这个命令并在可能的情况下取回数据?有没有第三方工具可以做到这一点?

4

2 回答 2

2

简单的答案是——如果事务已经提交,你不能回滚它,但你可以做其他事情来取回数据(或至少部分数据)。

当您执行 truncate 语句时,您的数据仍在 MDF 文件中,但它不可见,因为 SQL Server 现在将其视为可用空间(truncate 基本上是告诉 SQL Server 释放数据页)。

取回数据的唯一方法是以某种方式读取已释放的数据页并将它们转换为可读数据。

重要提示:您必须迅速采取行动,因为如果尚未使用新数据,则可用空间将被覆盖。如果您可以停止 SQL Server 实例并制作 MDF 和 LDF 文件的副本,这将为您争取更多时间。

尝试使用ApexSQL 恢复。据我所知,它是唯一可以进行这种恢复的可用工具。如果你真的很擅长 SQL,你可以尝试像这样修改和执行很长的脚本。

于 2013-04-15T03:12:32.607 回答
0

除非它是 Transaction Wrapped,否则恐怕你不走运。这是一个类似的帖子,但这也有更多的解释。

http://www.sql-server-performance.com/forum/threads/how-to-rollback-truncate-operation.16968/

于 2013-02-25T11:42:12.797 回答