场景:
将数据库查询到的数据,写入一个xls文件。完成后,多点几次,发现一个问题,偶数次生成的文件比较小,打开一看,里面只有一行,只有标题,没有内容。分析日志,发现偶数次执行时预期的执行进程中没有相关的日志打印分析:
奇数次执行与预期一致,就不再分析了;偶数次执行时虽没有找到日志,但生成的文件名与文件格式均与预期一致,唯独缺少文件内容。重启进程打开调试,果然在偶数次执行时,Eclipse中相关代码并没有触发,这与预期进程中没有找到相关日志打印是一致的。(事后分析:有与代码逻辑相现的结果文件名及标题,说明代码执行了,但在预期的进程日志没有找到打印,只能说明没有在预期进程中执行,但的确是执行了)问题:既然除缺少文件内容外,其它均与预期一致,说明相关代码肯定执行了。日志去哪了呢。解决办法(在这个环节出了乌龙):没有找到日志,说不定在其它地方有。然后使用NotePad++对整个目录搜索,最后得到的结论是没找到。这个乌龙结论的原因忘了,不知正在搜索时,远程主机被其它人占用,然后再登陆时状态丢失,还是当时Notepad++卡死,重启了。反思:对可能的疑点或一个猜想一定要严谨的验证,大胆架设,小心求证,一定要小心求证。这个乌龙,导致后面浪费自己和其它同事不少时间。使用Notepad++搜索很大的目录时,一定要限定扩展名,不然搜到大文件或二进制文件,会导致Notepad++卡死后重启。求助:求助相关模块的同事,对方验证了下均表示他们的模块无异常,让我这边排查代码逻辑。这就无解了,如果逻辑有问题肯定会抛异常,怎么可能找不到相关日志,报错或正常打印。在求助的过程中,有一个同事在帮助分析偶数次执行时,给一个提示,让确定下偶数次执行时,执行功能的path,应该是进程吧(猜的,这块对我是黑盒)由于当时一直纠结于为什么没有日志的事,把这个重要线索给忽略了。转机:正好遇到双休日,忽然想到这个故障,path中的root节点与另一个进程名很像,看看这个进程下有没有相关日志,一查,果然有!!!!!!!!!!!!!!!!!!!!!!!!!!日志的事有着落了,说明偶数次执行时,功能在另一个进程中执行了。问题:为什么没有内容呢,标题都有远程调试开一下,跟了代码,ResultSet中的确没有数据。为什么呢????????无解。。。。在干其它事时,忽然想到,是不是数据库连接有问题,把断点打在获取Connection之后,一看dbUser不是预期的那个,打开PL/SQL,使用Connection中使用的帐户登陆Oracle,把日志中的sql在这个用户下执行一下,果然查询结果为空。世界澄清了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。功能使用其它模块提供的获取数据库API,在不同进程下,这个API使用的dbUser是不一样的,这次比较巧的是,这个非预期dbUser中居然有表结构了。解决:与其它模块的同事协调处理办法。反思:故障出现了,肯定有其符合逻辑的原因,目标是根据已知的信息,大胆架设,小心求证,一定要求证。一定不能陷在,看似矛盾的已知信息上,而让自己陷入死循环。要根据已知,架设可能导致这种结果的可能性,再来一一验证,最终找到真正的原因。tips:
Notepad++文件件查找功能的help: