以前在某公司就职时,使用ORACLE数据库,做后台业务开发工作,经常查询数据库,通过查询数据库,来查找系统存在的bug。
系统测试通过上线后,难免有一些问题没有测试出来,测试的目的是尽可能的减少bug,不是把bug全部消灭,bug是不可能被消灭的。
没有测试出来的bug,就需要通过分析线上数据库,通过数据的一致性,来判断是否存在问题。
开始的时候,我们在分析数据的时候,经常发现明细和统计对不上,会员的余额和明细对不上,充值减去消费不等于余额,经过分析也不可能是系统的问题,
经过几个讨论,终于发现,原来是数据库备份的时候,有业务正在发生。比如数据库比较大,A表刚备份完,发生了一笔业务,修改了A表和B表,但A表已经备份完了, 所以备份文件里A表是业务发生前的,B表是业务发生后的。这样就会造成AB表数据不一致。
解决的办法
这里我起了一个优雅的名字“静止备份”,什么意思呢?就是在数据库静止时进行备分。
尽可能在不发生的业务的时间点备份,一般国内客户选择在0点到6点之间备份都是可以的,建议在凌晨3点备份。
或者备份前,停掉业务,比如关闭IIS等。