truncate删除数据MS SQL SERVER 2000 误删除数据后的恢复处理
一、背景情况说明:
在8/8/2007 17:08:25误提交了删除语句:
truncate table jzby_scanimginfo;
truncate table jzby_scanimginfoBAK;
truncate table jzby_wtmxb;
truncate table jzby_wttxb;
truncate table jzby_rwdd;
truncate table jzby_sjcsmx;
二、数据恢复处理情况说明:
今天是8-8日,数据库文件每天下班了都会进行完整备份,故存在一个前一天8-7日的完整数据库备份文件DB0807;
数据库自从创建后就没有备份过事务日志,并且事务日志设置的是缺省选项:自动增加事务日志文件大小;
目前服务器上的上述表已经被清空,此时先完整备份数据库生成磁盘文件DB0808,然后备份事务日志生成磁盘文件DB_LOG0808,这个事务日志文件里面就包含了自建库以来所有提交的SQL语句事务记录;
先利用前一天的数据库完整备份文件DB0807在另一个SQL服务器上恢复一个数据库DBFix,注意恢复选项里面要求选中“使数据库不再运行,但能还原其他事务日志”,选择它的原因是我们要在这个数据库备份的基础上还原事务日志;
还原事务日志的前提条件是数据库的恢复模式(故障还原模型)为“完全”,而不是简单或大容量日志模式(他们都不能够实现事务日志的时点恢复,即恢复到某个时间点截止,时间点后的事务日志记录就不恢复了),并且“自动关闭”和“自动收缩”这两个选项没有启用(处于未勾选状态);
这里进行事务日志的时点还原采用企业级管理器操作总是不能够设置我需要的时间点,总是提示我设置的时间点太小了,早于允许的最小时间,而这个允许的最小时间就是我前面备份事务日志的时间,我恢复到这个点有个屁用啊!最后不使用这种管理器交互操作,直接使用SQL语句连接master库进行提交:
restore log DBFix from disk='D:\DB_LOG0808' with recovery,stopat='8/8/2007 17:08:24'
执行完成后发现Truncate掉的表数据记录全部都回来了,到这里还没有完全搞定;
全新恢复数据库文件DB0808到另一个新数据库上,然后把里面在Truncate误操作后生成的少量生产数据再导入到前面恢复后的数据库DBFix中,至此DBFix数据库中这几个生成数据表就算是完全正确了,最后一步就是把这几个表数据导入到现行加工用的运行库中去了,注意导入的时候要处理标识字段,因为标识字段是不允许显式插入数值的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。