您的位置:首页 > 数据库

利用SQL日志找回丢失的数据

2006-06-20 18:11 387 查看
这几天碰到了我一生中最痛苦的事情,在对一个表中的一列数据进行update时,后来少带了个where语句,造成整列数据全部更新,也就是整列数据全部丢失,而以前又没有对次数据库进行备份,万分悲痛之下急忙上网找工具.

一共找到3个:

 Log Explorer 

 Apex SQL Log 
 
SQL Log Rescue 

首先说第一个Log Explorer,第一个可能很多人都用过,我下载下来马上连上数据库,点view log,发现了很多条操作记录,不过不管怎么调,那日志的时间都是6月12日到6月16日,我不知道我的数据库日志为什么只从6月12日开始,请高手解释一下.言归正传,我仔细看那些操作的记录,有很多改动的数据都能看到,可是我改动的那列是ntext类型,数据无法看到,使用 undo和redo都无法找到我那ntext类型的数据,即使使用"export log records"和"recovery"里面的操作也无法找到丢失的ntext数据.万分悲痛之下只好找第二个了

第二个Apex SQL Log,和Log Explorer 差不多,看到的日志记录里没发现找到ntext的数据,后来使用"recovery wizard"里面选择恢复数据,它生成的sql里面的我修改的ntext字段全是0x000...这类二进制数据,原来ntext类型的存储和其他数据类型存储的方式不同,在数据库中ntext存储的只是存储ntext内容的指针,我试着用readtext 读取其中它给我一个指针的值,可惜读不到,进www.apexsql.com/中去咨询,原来这个软件在这个地方有个bug,当恢复ntext类型的时候,只给出一个指针是有错误的,根本无法恢复,他们说在下一个版本中才解决这个问题,没办法了.

第三个SQL Log Rescue,这个确实让我兴奋了一下,因为当我连上数据库读取日志时,发现了一些我改动过之前的ntext类型的值已经改动之后的值,他在改动的记录上还对这两个ntext类型的值进行对比,不过高兴没多久,我才发现我原来只可以找到几条这样的值,进官方主页一看,原来才知道,他有值是因为我update这条记录在前面的日志中还有insert的记录,可是我的日志的时间只有6月12日到6月16日的,前面的日志我不知道为什么会没有了,所以我只能找回几条记录.

总结:个人觉得Log Explorer让我这次没一点收获,Apex SQL Log 至少让我知道了我修改的ntext类型存储的地方,期待他下一个版本能找到,SQL Log Rescue让我恢复了几条数据,可惜日志不全,如果日志全的话完全全部恢复,希望高手替我解释一下.

下班前匆忙写的,很潦草,见谅
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息