终于搞定被客户投诉的问题

来源:互联网 发布:知乎女神阿子 编辑:程序博客网 时间:2024/04/27 17:05

      之前在用户有新需求的情况下,改了不少代码,最后升级上去,一个月后,进行月度检查时,发现有一半部分数据并没有插入数据库。说道这里你可能有点晕了,我解释解释。

整个结构分为总循环控制程序,出账程序,包括预处理,批价等,还有入库程序。共有4个进程,同时在跑。当用户订购时,会产生原始话单,然后进行批价,批价会生成账单,这个用于扣帐,还有会生成导入数据库的话单,方便用户对账。

              control-----------启动------------->price-----------结束有文件产生时---------------->loadDatabase

       当时我更新了批价程序,然后现场单机服务器变成了双机,还有需要入库的话单文件格式变了,多增加了几个字节,这个时候双机过来的订单大于等于2个,发现入库程序只能入成功其中一个账单,另外一个没入成功,分析了很久,我没有改入库程序,所以应该其他程序对它应该没有影响,话单内容格式也没变,只是话单文件格式变了,后来发现当话单文件格式变长时,其中一个函数的局部常量变量,在第一次循环时,还有值,第2次循环时,该变量变为空的了,导致第2次循环无法入库。我实在无法解释这种情况,没有人为地清除这个局部变量,这个局部变量也不是动态的。

 

我的解释:入库程序实现方式为:每隔3秒入库程序扫描需要入库的文件,然后遍历这些文件,一个文件一个文件入库。
当文件标识字段变长(由原来的2为改为4位)时:
有个局部变量常量,初始化内容为路径,
遍历第一个文件时,该变量值存在,所以入库成功;
遍历之后的文件时,由于文件长度变长,内存段被占用,导致取该变量值变成空,导致执行入库sqlldr命令时,其中的一个参数错误,无法入库成功。
所以当由2改为4为后,每次扫描都只会入第一个文件。 

 

还有谁给解释下呢?

 

原创粉丝点击