在展开叙述之前,先对oracle网关用来干吗的做一个简单介绍。
一、oracle网关的作用
假设你有这样的一个需求,想通过oracle数据库直接访问异构的数据库,那就要用到oracle网关。我当年就是怀揣着这样一个梦想,如果能在oracle里面访问mssql数据库,那就太好了,我就可以用plsql直接查询mssql,很方便。广东省大部分的医院都会存在这两种数据库,典型的应用场景,his跑在oracle之上,病案管理系统跑在mssql上。在查询统计的工作当中,有时候会用到his与病案系统数据合并查询。比如根据病案首页数据来分析医保患者。
带着这个梦想,在百度上寻找答案,一个个关于网关的解决方案映入眼帘。经过一个星期的折腾,终于配置好网关可以访问mssql,欣喜若狂,以后终于方便多了。
网关 通过网关查sql2000二、oracle网关失效
上个星期我们决定将我院的病案系统数据库sql 2000升级到sql 2008,为了升级方便,在另一台服务器上安装sql 2008并导入数据,升级完全以后,我将用到连接病案数据库的程序改为新的IP地址,都正常可以访问,就剩下网关了,我按之前文档配置成新的IP,再在plsql测试,发现sql语句一直在执行,卡在那里,既不出结果,也不报错。
遇到这种问题,上一篇文章也提过,最有效的方法是用排除法,然而在这种情况下面,排除法是失效的。使用排除法有个前提,必须要知道排除选项确定不是这个原因,显然这里你是无法确定的,是oracle bug?是mssql 2008 已不支持?是oracle 网关bug?
oracle网关虽然好用,但出了问题很难解决。面对这种情况,我们最好的方法以后规避它,能不用就不用,尤其是开发的程序里面不要使用,但是临时的SQL统计可以使用。要不然像彭大帅那样“【彭建明专栏】IT运维系列谈(3):亲历让人后怕的医院数据库“灾难恢复”,自己亲手埋下“地雷”,还亲自踩上去,被炸个人秧马翻就不好了。
三、pb程序修复“网关失效”坑
我开发万能信息科程序里面,一小部份功能,当时为了方便(避免连接2个数据库),使用oracle网关进行开发,用pb9找到相应的"数据窗口",右键---edit source,一定要用这种方式打开,如果通过工具栏”sql“进去修改,pb会连接oracle数据库,现在网关已失效,pb会卡死在这里。
badata连接到网关再将相应window对象改成直接连接mssql数据库来处理,但是奇葩的问题来了,比如我只改一条语句,保存的时候一直提示未响应,pb卡死在那里。
以前一直都可以,为什么现在不行?是不是win7环境有问题,百度找一下,说有这个bug会导致这种问题,但是我下载补丁,安装以后,测试故障依旧。
然后又找了一台win xp的机器,来修改,故障依旧。这就奇怪了,到底是什么原因会引发未响应,我尝试改了一下其他窗口的代码,是正常的。为什么这个连接sql server的代码会出问题,带着这个问题一直思考,今天终于想明白了,原来pb保存window对象时,首先会检查一下语句是否正确,包括”嵌入式sql语法“,因为程序之前引用了badata,而badata是连接网关来的,pb检查嵌入式sql语法正确并连接oracle数据库验证,但是网关已失效,无响应也不报错,导致pb就卡死在这里。
原因找到了,接下来就好办法,打开编码先将window对象所有涉及到badata全部去掉,再保存,pb就正常了!
冯火 2019-12-17
网友评论