实验室一套测试环境最紧一周老是出现一个奇怪的问题:程序从数据库里取不到数据,但是根据日志里打印出来的SQL语句手动去数据库查询,又是能查询到记录,且这个问题不定期的出现,有时莫名其妙又好了,实在令人头大。
环境大致如下:VM的standalone的虚拟机,WinServer2012+SQL2012, 机器名为Name1, ip地址为IP1,数据库的连接串用的是机器名。
开始以为连错数据库,但是在把整个数据库连接字符串打出来后,访问的机器就是Name1. 在cmd窗口查看到机器名就是Name1, 所以确定连接的没有错。但是用SQLProfile跟踪本地的SQLServer语句,发现SQLServer没有程序发出的语句,似乎程序根本没有连到本机的SQLServer,真是奇怪。如果连错了数据库,我们的程序不报错,也极是奇怪。
今天下午,毫无方向,不知如何处理。然后,无聊的在出错的机器上,随便尝试了Ping了下Name1,突然然后,输出窗口里居然告知Name1的IP地址是IP2,不是本机的IP1 !@_@
然后顺着IP2去查找,发现了原因。原来上周的时候,另一个同事,复制本虚拟机,机器名没有改,但是IP地址自动获得,变为了IP2。这样在实验室局域网中有两台机器名一样、IP地址不一样的机器。可是两台机器都没有IP地址重复那样报报名字重复,然后程序的连接串是基于机器名的。不知道怎么的,公司的网络一会把Name1解释为IP1,一会儿解释为IP2。IP2的机器拷贝后,我们本周在IP1机器上加的信息,在IP2机器上没有,所以程序报错。
我们对这个结果大为诧异,想不到TCP里有这个BUG,看来要好好学习啊。