一个程序员的梦

导航

SQL 恢复技巧(来自博客园)


前段时间一个客户在管理他的SQL数据库的时候误执行了一个DTS包,里面包括有truncate table的语句段。虽然他在1秒内做出了反应,但是还是导致一个有40几w数据的表的所有数据被清空。要知道那张表是他们最核心的资料,里面是他们几十万客户的基本资料,问题非常严重。

过去之后发现他们的数据库制定了定时备份作业,每天晚上2点会备份一次数据库,不过很不幸他们的备份策略是只备份数据文件,没有备份日志文件(而这个恰恰是大多数人的备份策略)。所以如果直接用备份的bak文件只能恢复到前一天的数据,那将损失将近一天的数据。有没有办法实现完全恢复呢?

查找google发现这样的文章http://www.knowsky.com/4883.html,文章说truncate table是不记录无法日志的,所以无法通过日志的定点还原技术恢复。

但我们还是决定采用以下步骤:
第一步首先完整备份了数据库的日志,而没有备份数据库数据文件;
第二步进行日志的定点还原,选择恢复到误操作之前的时刻;

由于运行时间很长,我就先回去了,让服务器自己运行。第二天客户告诉我数据居然全部恢复了,包括truncate table之前的所有数据!

呵呵,看来那些文章说的也不一定正确,truncate table确实不写入日志,但它之前的对数据库的各个操作(insert,update,delete)是记录了日志的。所以呢truncate table之前的数据是可以恢复出来的。

posted on 2005-03-24 16:44  newman0816  阅读(359)  评论(0编辑  收藏  举报