如何撤消TRUNCATE命令

时间:2013-02-25 11:37:43

标签: sql-server sql-server-2008

我意外地在错误的表上执行了TRUNCATE命令,我的所有数据都消失了。我们有一个备份,但它有2周的时间,并没有所有最新的数据。

如果可能的话,我们如何回滚此命令并获取数据?是否有任何第三方工具可以做到这一点?

2 个答案:

答案 0 :(得分:2)

简单的答案是 - 如果事务已经提交,则无法回滚事务,但您可以执行其他操作以获取数据(或至少部分数据)。

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

获取数据的唯一方法是以某种方式读取解除分配的数据页并将其转换为可读数据。

重要提示:您必须快速行动,因为如果没有新数据,可用空间将被覆盖。如果你可以停止你的SQL Server实例并复制MDF和LDF文件,那将会花费你更多的时间。

尝试使用ApexSQL Recover。据我所知,这是唯一可以进行此类恢复的可用工具。如果您对SQL非常熟悉,可以尝试修改和执行非常长的脚本,如this

答案 1 :(得分:0)

除非是交易事件,否则我恐怕你运气不好。 这是一篇类似的帖子,但这也有更多的解释。

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