入职第二年,我删了200000+条生产环境数据,绩效垫底,年终奖一分没有。
事情源于近期热点:上海程序员离职删除核心代码,获刑10个月,想想得不偿失,网友评论:为什么不留点bug再走,为什么sha自己祭天,算法写多了没算到法网吗?
所以我聊聊我的工作糗事,记得我第二份工作,也是入行第二年,主导一个项目,一个失误生产环境删除了20万条数据,主管恢复了一天,最后绩效垫底,年终奖泡汤。
公司并没有对我实施例如罚款,扣工资惩罚,而是加强了员工技能提升,每周技术复盘,技术分享,这家公司我待满了三年才离职。
当时公司算外包,只维护一家跨过公司国内电商系统,卖酒的,喝一瓶能吹到天亮的那款。
这个项目当时是我负责的,售点问卷调查,旗下有30多万售点,而且预设了30多万初始化数据,客户给的excel,经过脚本清洗数据后导入生产数据库。
上线后并发(完成问卷,售点有实物奖励,销售员也有绩效奖励)导致了几千条数据重复数据,后来代码优化后上线后,接下来要删除重复数据。
我写了一个删除重复数据的sql给项目二把手,当天一把手上班晚一个小时,日常上线都是一把手来处理。早上客户比较着急,我写完sql就给二把手,一顿操作,二把手说好了,因为是一个很简单的删除操作,可能他也没注意。
过了三分钟,大量的客户反馈他们问卷草稿全部没了,问卷调查白做了,因为题目比较多,有个保存草稿功能,
后来二把手一查,问卷调查主表信息全没了。当时我浑身发躁,满脸通红,觉得职业生涯完了。
后面一把手来了,先安抚客户,经过大半天时间,我也参与不了,生产数据库没有权限,好歹下班前数据恢复了。当晚我几乎没有睡着,忐忑,自责,羞愧,自卑。
后来周会一把手委婉批评了我,当然也说了二把手执行sql没有仔细看也要承担部分责任。
现在来看看是什么sql会把单个表数据全部干掉,如下delete * from table A where member_id in(1,2,3)
会员id这里只是简单罗列几个,问题在于我把where条件中的member_id 写成了membe_id少了一个字母r。
就是这样一个简单sql把table A的数据全部干掉,按理字段名称错误会提示出来,然后当时生产数据库并没有。
我当时觉得很冤枉,不过也要归结于我没有在测试环境和uat环境执行。事后我在测试环境和uat执行一遍,这个错误sql是会提示字段不存在,根本不会把表数据删除。
我嘀咕是不是二把手什么操作失误导致的,最后不得而知,因为客户都是B端快销产品,实时性没有那么高,当天解决也没啥事。
总结就是数据库日常要做好全备和增量备份,以防万一。这次事故也让我日后工作更加谨慎,不管是提测,还是交付任何东西前自测,检查是一定要的。
针对网络上的这次事故,我认为程序员作为高级知识分子,高智商的打工人,但也不能凌驾法律之上,做好工作同时也要遵纪守法。
否则得不偿失,后果咎由自取,朋友们在工作中有出现过什么失误或者糗事可以分享下,给大家借鉴,敲个警钟。
