ORACLE的dblink突然连不上的问题分析

简介:         昨天中午10点,突然接到总经理电话,说有客户反应LIS和PACS无法收费了,必须马上给处理掉。

        昨天中午10点,突然接到总经理电话,说有客户反应LIS和PACS无法收费了,必须马上给处理掉。但是客户端PC却能连接到oracle服务器,没有使用dblink的业务运行都正常。LIS和PACS计费由于要连接不同的数据库,使用了dblink。经过初步排查发现dblink无法连接了,重新创建dblink也不好用。突然想到,会不会是服务器的所有端口号被占满了呢?因为以前有家客户的服务器就是由于所有端口号被占用,造成了数据库无法备份。当时查到所有端口号被占用后,我咨询了一位比较熟悉ORACLE的同事。他告诉我可能是服务器中病毒了。虽然当时客户对服务器中毒的解释深表怀疑,但是还是联系硬件厂商对服务器进行了查杀病毒并重启了服务器,服务器重启之后问题解决了。我让现场工程师查了一下,果然服务器所有端口号被占用了。

        难道又是病毒在作怪?这次我自己都开始怀疑了,这种情况不同的客户都出现过,应该不太可能是病毒的原因。由于两家客户用的都是windows操作系统。我开始怀疑是不是操作系统的问题。有了这样的想法之后,终于在微软官网上面找到了答案,的确是操作系统bug。官网是这样描述的:All the TCP/IP ports that are in a TIME_WAIT status are not closed after 497 days from system startup in Windows Vista, in Windows 7, in Windows Server 2008 and in Windows Server 2008 R2。Windows Vista,Windows 7,Windows Server 2008,Windows Server 2008 R2,这些操作系统在启动第 497 天后,将不关闭 TIME_WAIT 状态的所有 TCP/IP 端口。这样的话,所有端口号很快就会被占满的。由于dblink需要临时端口号,当没有端口号可用的时候,dblink就无法使用了。

        由于客户比较着急,我建议他们立即重启服务器。但是时间是中午10点,虽然是周末,但是业务量还是比较大的,客户不同意重启服务器。通过查看使用dblink的源码,发现dblink跨数据库操作只是为了避免并发。在确认暂时注释掉dblink对业务影响不是很大的情况下,我让现场工程师把dblink相关的操作给注释掉了。业务马上恢复了正常。

        其实我一直反对在业务中使用dblink的,这样的设计方法,直接从数据库层面发生了耦合,完全是不合理的。虽然暂时能收费了,我们还得尽快修改业务流程,避免数据库层面耦合的发生。当然了,说服客户对操作系统安装补丁也是不可缺少的工作。

        现在想来,第一次出现端口号被占满的时候,告知客户服务器中毒是错误的,那次能解决问题不是因为杀了毒,而是因为服务器重启了。

目录
相关文章
|
Oracle 关系型数据库 MySQL
Oracle通过DBLink连接MySQL
Oracle通过创建DBLink连接MySQL,查看修改MySQL表数据
8262 0
|
4月前
|
存储 Oracle 关系型数据库
百度搜索:蓝易云【oracle dblink mysql查询text无法显示问题】
通过使用 `DBMS_HS_PASSTHROUGH` 包执行 MySQL 查询并返回 CLOB 类型结果,可以解决 Oracle 数据库中无法直接显示 MySQL TEXT 类型数据的问题。
46 0
|
11月前
|
Oracle 关系型数据库 Linux
启动一个新的Oracle从进程,数据库就连不上了!(ORA-27303)
一线的工程师反映,一个客户在安装了我们公司的产品后,客户的数据库突然出现客户端无法连接的现象!
120 0
|
SQL Oracle 关系型数据库
创建Oracle DBLink及同义词方法
有时业务经常需要跨库执行SQL语句,就需要创建两个数据库之间的链接对象或通过同义词来实现。
502 0
|
SQL Oracle 关系型数据库
Oracle dblink的连接模式的关系测试总结
Oracle dblink的连接模式的关系测试总结这篇主要介绍一下database link由于连接数据库的方式不同遇到的一些问题,我们知道连接ORACLE服务器的模式一般有两种方式:专用服务器连接(dedicated server)和共享服务器连接(shared server)。
1847 0
|
关系型数据库 数据库 数据安全/隐私保护
Oracle跨服务器访问使用dblink
当要夸服务器访问数据库时,我们可以使用dblink建立连接服务器间的通道,本地创建了远程数据库的dblink后,访问远程服务器的库就像操作一个库一样了。 如果需要创建全局 DBLink,首先要确定用户有创建 dblink 的权限: 使用此语句查看:select * from user_sys_pr...
1805 0
|
Oracle 网络协议 关系型数据库
oracle通过dblink连接mysql配置详解(全Windows下)
oracle通过dblink连接mysql配置详解(全Windows下)http://www.bieryun.com/3394.html 关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚开始走了一.
2770 0
|
Oracle 关系型数据库 Java

推荐镜像

更多