如何解决误操作修改某字段内容,请教还原数据库的方法

dyiajure 2010-11-09 06:07:54
今天下午测试程序,程序能自动修改某些错误记录的某字段内容,结果由于疏忽导致整个表所有记录的该字段值都被修改了,特地来求教如何修复该表,是不是通过程序修改的在数据库日志上没有记录啊?各位大侠帮帮忙吧
...全文
247 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyiajure 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 obuntu 的回复:]
只要从全备份后的日志没有被截断,那就可以啊。这个叫tail-log,恢复时使用的第一招。
[/Quote]
我昨晚备份了日志尾部,然后还原,结果到现在还没还原完。怎么会出现这种情况?
obuntu 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dyiajure 的回复:]

引用 6 楼 obuntu 的回复:

完全备份很早以前的也可以,

先进行日志备份,然后再应用完全备份的还原,然后再利用刚备份的日志进行stopat恢复。

我这份日志是误操作之后的了,不会恢复后跟现在一样吧?
[/Quote]

只要从全备份后的日志没有被截断,那就可以啊。这个叫tail-log,恢复时使用的第一招。
一品梅 2010-11-09
  • 打赏
  • 举报
回复
log explore...
dyiajure 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 obuntu 的回复:]

完全备份很早以前的也可以,

先进行日志备份,然后再应用完全备份的还原,然后再利用刚备份的日志进行stopat恢复。
[/Quote]
我这份日志是误操作之后的了,不会恢复后跟现在一样吧?
obuntu 2010-11-09
  • 打赏
  • 举报
回复
完全备份很早以前的也可以,

先进行日志备份,然后再应用完全备份的还原,然后再利用刚备份的日志进行stopat恢复。
dyiajure 2010-11-09
  • 打赏
  • 举报
回复
是我的sql2005坏了么?日志里有的操作记录丢失了?
dyiajure 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zsh0809 的回复:]

2005的话用log explorer试试
SQL code
打开log explorer file=> attach log file-> 选择服务器和登陆方式-> connect->
选择数据库-> attach-> 左面对话框中browse-> view log-> 就可以看到log记录了
想恢复的话: 右键log记录 undo transation……
[/Quote]
谢谢你这么热心的帮助,只是我update了一张dataset表,但是我在view log中找不到这一项,今天的记录一共才不到10项,我看了好几遍了,确定不是眼花
dyiajure 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 heymal 的回复:]

有完全备份和,日志备份吗?还原完全备份,再利用日志备份还原到时间点。
如果没有备份就使用 log exploer工具,论坛上有教程,你找找。
[/Quote]
完全备份很早之前的了,我在用log exploer,但是日志记录里没有我update的那张表的记录,晕死
「已注销」 2010-11-09
  • 打赏
  • 举报
回复
2005的话用log explorer试试
打开log   explorer   file=> attach   log   file-> 选择服务器和登陆方式-> connect->
选择数据库-> attach-> 左面对话框中browse-> view log-> 就可以看到log记录了
想恢复的话: 右键log记录 undo transation-> 选择保存文件名和路径-> 然后打开该文件到查询分析器里执行
T-sql代码就可以了

例如 如果log是delete table where ...的话,生成的文件代码就是insert table ....

------------------------------------------------------------------------
log explorer使用的一个问题

1)对数据库做了完全 差异 和日志备份
备份时选用了删除事务日志中不活动的条目
再用Log explorer打试图看日志时
提示No log recorders found that match the filter,would you like to view unfiltered data
选择yes 就看不到刚才的记录了


如果不选用了删除事务日志中不活动的条目
再用Log explorer打试图看日志时,就能看到原来的日志

2)修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复

3)然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上,
否则会出现数据库正在使用无法恢复)
恢复完后,再打开log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data
选择yes 就看不到刚才在2中修改的日志记录,所以无法做恢复.


恢复过程:
使用工具是LogExplore,(下载地址:http://five.ttdown.com/L/Log%20Explorer%20for%20SQL%20Serverv%20v3.21.KG.exe)

安装后打开log explorer file=> attach log file-> 选择服务器和登陆方式-> connect->
选择数据库-> attach-> 左面对话框中browse-> view log-> 就可以看到log记录,
点击“View DDL Commands”里面就有很多drop table 命令
点击下面的“undo”按钮是生成表结构的语句(create table ....)
点击下面的“Salvage”按钮是生成插入语句的(insert into ...values....)
(以上lynx1111提供)

我是按照上述方法的“Salvage”来生成被删除表的Insert语句,实际上用这个方法生成的SQL脚本已经包含了CreateTable。该过程速度大概用了8个小时,当时觉得慢,后来相比恢复过程,这个速度简直快的不行。最大的表脚本生成后超过1G。

生成所有的SQL脚本后,防止万一,我将数据库停下,并把Date文件夹的Log和.MDF文件拷出来(怕破坏LOG文件,没有使用数据库的备份方式备份),文件大小总共为5.7G

此后开始进行正式的恢复工作。新建一个数据库,先试着用SQL查询分析器运行了一个小表的脚本,完全没有问题。但后来发现导入比较大的SQL脚本文件,查询分析器就报错了。请教了realgz得知logExplorer本身对大脚本有良好支持,因此改用LogExplorer--》Run SQL Script 功能来运行脚本。果然大文件也可以恢复了。

但开始运行后发现包含有ntext字段的表恢复起来异常缓慢,打开一个包含nText字段的表的恢复脚本发现里面使用writeText来写入数据。恢复一个30万数据的表居然用了将近12小时的时间,而数据库中又有大量这样的表,为了加快数据,我又在几个机器上装了LogExplorer加入恢复过程,终于经过3天的时间,全部的表都搞的差不多了,不过恢复过程有少量的错误。

接下来我将几个机器的表导到同一个数据库中,不过此时恢复的表是没有包含索引、标识等扩展属性的,因此需要重新建立索引、标识、默认值以及触发器。在建立主键的时候发现居然有数据重复。。。没办法只好删除重复数据。

使用 select distinct * into t_New from t_Old 可以删除重复数据,但遇到有ntext字段的表是不能用这个方法的,最后只好用 Delete From t_Table Where ID IN (Select ID From t_Table a where (Select Count(*) From t_Table a where a.ID = ID ) > 1 )直接删除了有重复数据的记录

经过72小时的努力,99.9%的数据恢复。并于4月8日晚上恢复运行网站。

这时候部分用户反映无法登陆,一查发现是有小部分数据丢失,也就是LogExplorer里报错误的那些数据……没办法,我重新用UEdit打开SQL脚本,查找这些数据,发现还在,仔细一看发现,这些数据里都有部分内容里使用大量的回车,LogExplorer无法识别,因此才出的错误。

呵呵,顾客是上帝,没办法,只好将用户表重新在本地恢复一次,遇到错误就记录下ID,然后再考出SQL脚本到查询分析器运行(查询分析器可以运行)

现在建立了维护计划,每个星期做一次完整备份。另外操作数据库的流程也变的规范,防止此类事故出现

[一些收获:]
1、慎重使用Text/nText字段
2、LogExplorer的脚本执行工具对付大文件很不错,但执行过程会对多个回车产生误判断
3、有问题不要着急,上csdn找高手帮忙,他们会很热心帮助你。
heymal 2010-11-09
  • 打赏
  • 举报
回复
有完全备份和,日志备份吗?还原完全备份,再利用日志备份还原到时间点。
如果没有备份就使用 log exploer工具,论坛上有教程,你找找。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧