生产环境错误数据修复办法
2015-12-30 20:04
218 查看
互联网项目的用户使用量通常比较大,如果系统设计的不好,考虑的不周全,很容易出现各种故障,随之也有很多的错误数据产生。下面列举一些处理线上数据的方法。
然后每条慢慢修复。当然你用批量的方式也可以,但是要注意事务问题和如何跟踪哪条数据更新失败了。
备注:
使用批量方式,如果数据更新出错或者插入失败,则应该事先编写细粒度接口,可以单独更新或者插入某条数据。这个很重要。
2、整理数据需要细心仔细有耐心;
3、可能还需要编写一些小工具,帮助处理从数据库中查询出来的数据;
4、一定要有细粒度程序接口,否则无法针对单条数据进行修复;
5、在线上数据库进行sql查询时,不要动不动就整个表count(*),表数据量大,很容易拖垮数据库的。线上数据库执行sql,必须小心小心又小心。尽量多用limit关键字。
编写细粒度接口,修复数据
如果需要修复的数据的量不大,例如几百条,那么可以编写一些细粒度的接口,比如说,你需要更新某些订单数据的状态,那么你可以编写类似下面的方法。public void updateOrderStatus(Long orderId,String orderStatus){ orderRepository.updateOrderStatus(orderId,orderStatus); }
然后每条慢慢修复。当然你用批量的方式也可以,但是要注意事务问题和如何跟踪哪条数据更新失败了。
使用批量的处理方式
如果数据量很大,例如12万条,那么只能使用批量的方式。这种情况下,最好是在夜深人静,系统访问量不大的时候执行,不然可能影响系统的响应速度的。备注:
使用批量方式,如果数据更新出错或者插入失败,则应该事先编写细粒度接口,可以单独更新或者插入某条数据。这个很重要。
准备sql,让dba帮忙
当然如果可能的话,也可以让dba帮忙执行sql,修复线上数据总结
1、修复线上错误数据是个苦差事,本来就是坑,如果你修复不当,就是另一个大坑;2、整理数据需要细心仔细有耐心;
3、可能还需要编写一些小工具,帮助处理从数据库中查询出来的数据;
4、一定要有细粒度程序接口,否则无法针对单条数据进行修复;
5、在线上数据库进行sql查询时,不要动不动就整个表count(*),表数据量大,很容易拖垮数据库的。线上数据库执行sql,必须小心小心又小心。尽量多用limit关键字。
相关文章推荐
- springmvc配置不拦截静态资源
- Collectl: Linux 性能监控的全能冠军
- ASP.NET网站入侵第三波(fineui系统漏洞,可导致被拖库)
- 关于lua中的loadstring
- call
- windows下gvim初步安装配置
- myBatis源码学习之SqlSessionFactoryBuilder
- myBatis源码学习之SqlSessionFactoryBuilder
- Django1.9快速写简单的博客
- Google和eBay在建设微服务生态系统中的深刻教训
- bzoj 1001: [BeiJing2006]狼抓兔子
- myBatis源码之SqlSessionFactoryBuilder
- MySQL如何导出带日期格式的文件
- MySQL 慢查询日志(Slow Query Log)
- android RecyclerView
- Android Support Design Library之NavigationView
- C语言中的自定义函数
- android:clipToPadding和android:clipChildren
- getEntitiesByType( EntityPlayer )[0];
- 【DirectX 9.0学习之路(第一话)】——Direct3D初始化(上)