0%

不小心改库的体验..

今天在修改布局表Vo_BaseVouch表的时候 操作完以后总感觉不对劲

等我发现的时候,能清晰的感觉的到后脑勺发凉伴随大脑中出现泡沫碎掉的感觉(蓬蓬的)

过一分钟左右,大脑夺回意识,忘了加条件了….

于是开始数据恢复之旅。

—————————–祖传分割线———————————————–
没有把之前的记录图片记录下来,先把过程记录一下

后期创建一个库执行一下原过程

Vo_BaseVouch表中的cFieldUUID全部改成了一样的

导致公司所有页面加载失败,还好不是业务数据,备份只有昨天的,当时是晚上会丢一天的数据

Vo_BaseVouch表中的cFieldUUID关联到Vo_BaseField中的cFieldUUID

其中Vo_BaseVouch中的cFieldKey对应到Vo_BaseField中的cFieldKey

1
2
3
4
update Vo_BaseVouch a
inner join Vo_BaseField a2
on a.cFieldKey=a2.cFieldKey
set a.cFieldUUID=a2.cFieldUUID; --这次真的没有条件......

但是由于Vo_BaseVouch中的Key不是必须对应且允许为空等一些原因,导致部分页面显示不正常

至少现在大部分页面显示正常了,然后找到昨天备份的数据,将这个表的数据导进来,这个就不展示了

没有留存之前的图片,也灭心思~,后期新建一个库记录原过程,再来更改文章

导进来之后命名为Vo_BaseVouch_20200102_bak,两个表中的id都是一致的查询id相等并且uuid相等

1
2
3
4
select 
a.id,a.cFieldUUID,b.id,b.uuid
from
Vo_BaseVouch a join Vo_BaseVouch_20200102_bak b on a.id = b.id

关联查询出的数据和Vo_BaseVouch_20200102_bak中的数据条数不一致

直接把备份表中与Vo_BaseVouch不一致的数据改成备份表中的数据id相等uuid不等

1
2
3
4
5
6
7
8
select * into renxingyun from Vo_BaseVouch --先备份了一下表
begin tran
update
a set a.cFieldUUID = b.uuid
from
Vo_BaseVouch a,ls_test2 b where a.id=b.id and a.cFieldUUID<>b.uuid
commit
rollback --结果没问题commit

通过这件事我感觉不止是误操作数据后的处理,更重要的是事前预防

在修改删除数据的时候如果数据量小的话还是先备份一下数据 然后开启事务

毕竟春运期间,票也不好买

把 sql_safe_updates 参数设置为 on 这样del和upd数据的时候 忘了写where条件

或者条件中没有包含索引字段,这条sql就会执行出错了