记录一次意外删除业务表数据的处理
在一个周六的中午,突然接到了客户的电话,说有一个很紧急的故障需要
处理,开发人员误删了一张业务表,且因为种种原因已经
commit,,
现在需要
恢复。虽然后来才知道是非常核心的业务表(以下称表
A
),当天这个操作已
经严重影响电信用户查询修改各种套餐,不过当时并没有想到影响这么大,后
续的处理过程也让给我一个深刻的教训。
由于以前也经历过类似的事件,当时的时间约是
10
点
10
分左右,客户和
我说操作时间在
9
点
50
分左右,时间不算常,第一时间想起用
undo
闪回查
询保留数据:
select * from table_name as of timestamp to_timestamp('2019-xx-xx xx:xx:xx','YYYY-
MM-DD HH24:MI:SS');
10
点
15
查询当前
A
表的才
200
多条,查
9
点
55 229
条,查
9
点
53
分就
160
多万行,不过数量级还是不对,客户说正常应该
1200
万左右,再闪回查
询,这期间可以看到随着时间往前推移行数在不断增加:
10
点
51
的
980
万
10
点
50
的时候就变
1500
万,
9
点
49
的时候有
2300
万,
9
点
48
分
10
秒
的时候有
3000
万,
9
点
48
分
0
秒就报快照过久了。不过我发现
9
点
48
分
08
秒到
9
点
48
分
10
秒这段时间内行数没有减少,行数在
3000
万左右;介
于刚才的查询每一秒行数都在减少的情况下,我主观认为这个时刻可能就是
delete
之前行数最大的时刻,和客户沟通这个行数也和业务对得上,
48
分
0
秒
undo
就过期了,当时觉得有点幸运,抓紧
create table as select
创建出
备份表,数据出来了后续就让开发人员折腾数据就行了,以为这事结了,准备
吃口饭时,客户打来电话,说数据还是不对,还是少。不过这时我也没太慌,
评论