Shell's Home

Jan 29, 2007 - 1 minute read - Comments

惊魂记

大家知道贝壳的财务是通过自己写的程序进行跟踪合计的。以前是excel表单上面加VBA宏,后来移动到了Mysql数据库。因为数据存储量大,运行稳定,使用方便,所以贝壳一直很得意。

昨天贝壳发现自己的财务怎么也算不对,因为单位的工资发到了浦发的卡上,而程序里面是没有浦发的账户的。本质上是由于程序中使用硬编码导致程序对数据库存在非合理依赖(有点专业,听不懂就算了)。所以从理论上说,我需要修改表结构。

于是贝壳就先备份了表结构(悲惨啊,大家后来就知道了),然后修改了账户的表结构。然后贝壳发现财务表里面没有使用UNIQ限定,于是又对财务表修改了结构。但是无法通过,原因是因为现有数据中有的不符合UNIQ限定。于是贝壳又合并数据,做了半个小时多的操作,好算添加了UNIQ限定。这时候,贝壳送了口气。处于不可告人的怪癖,贝壳运行了自己写的核算程序,上面赫然写着,当前现金,-1034。

不用说,一定是合并数据的时候出现了错误,问题是错误在哪里呢?不知道,贝壳只有删除了UNIQ限定,然后恢复数据——shit,没备份。

开始的时候,贝壳只需要修改表结构,于是就只备份了表结构,数据还是上个月的备份。OMG,怎么办?怎么办?怎么办?

于是贝壳就开始了悲惨的修复经历。

首先我确定合并的数据都是在上个月备份以内的。就是说,这个月新添加的数据都是没有经过合并操作的。于是贝壳导出当前错误的数据,并且从中截取出这个月新的数据,这部分数据一定是正确的。然后和上个月的备份合并到一起,放到新的文件里面导入数据库。运行财务核算程序,OK,当前现金380.89。

贝壳又一次低估了上帝的决心,高高兴兴的删除了临时文件。然后导出新数据,准备关闭程序睡觉去。然而运气的是,贝壳在关闭前看了眼数据。啥?注释是乱码?

财务软件并不使用注释字段,那个是被贝壳用的,所以财务软件不会报错。可是注释乱糟糟,等于一半的功能被砍掉了。贝壳赶快想怎么解决。当前数据和备份都是错误的,上个月的备份还在,可是少一个月数据。就是说贝壳丢失了一个月的数据!

没办法,贝壳紧急安装修复软件。但是超级RP的是,贝壳上次Uninstall了一个东东还没reset(这是贝壳的一个坏习惯,Uninstall了以后不reset,等系统自然需要reset)。FinalData的Installer在Uninstall事件没有完成前不能运行。我靠~~~贝壳顿时怒了——上网找了半天,找到一个免安装绿色修复软件,Recover4all。运行,找到了上次导出的数据。

吃一堑长一智,贝壳先完美的备份了这个文件(包括扔到了U盘上一份)。然后将这个和上月的备份重新合并,切换编码,重新导入——蓝了——

靠——上帝的决心是无止境的——比客户的变态还无止境——当导入超长的时候,居然诱发了XP64的溢出。由用户输入诱发溢出,我还真是伟大。

贝壳重启,重新合并,然后切分成两次,切换编码,分次导入。总算数据正常了。然后运行财务核算程序,也正常。去手工看表,也正常。不过贝壳的几个新修改和半小时的合并工作就作废了。

忙碌两个小时快,总算让数据库恢复到了以前的状态。还真是——

不说啥了——

Tags: computer database

基础类 轻轨意外延迟的处理过程

comments powered by Disqus