Windows 2003上Oracle通过端口映射访问连接超时的解决办法

来源:互联网 发布:淘宝一元云购在哪里 编辑:程序博客网 时间:2024/06/05 17:04

布署在移动机房的Oracle数据库是在内网,没有分配公网IP,我需要连接上去,通过PortTunnel软件在WEB服务器上将1521端口映射到这台Oracle数据库服务器内网IP的1521端口,使用此种方式进行远程连接在内网的Oracle数据库服务器之前曾使用过,没有出现问题。但是今天所有的配置做好之后,却一直出现提示:ora-12535连接超时。最开始怀疑是网速或网络不通的原因,遂检查问题都排除。以下是具体处理过程和最后解决的办法,现在已经能正常连接上了。

环境:Windows 2003 Server SP2 、Oracle9i

检查过程:telnet 远程IP 1521 结果:能响应,连接通过;

tnsping xxx 结果:查看TNS解析情况,解析正常,连接通过;

局域网使用PLSQL Developer访问数据库正常;

远程使用PLSQL Developer访问数据库出现错误:ora-12535,连接超时错误。

分析:因为端口映射和上次做的一样,唯一不一样的就是Oracle安装平台不一样,那台服务器是Linux的,记得曾经看过说Windows NT下的Oracle会分配一个随机端口,经过一翻搜索,找到了解决办法。Network Listener 只起一个中介作用,当客户连接它时,它根据配置寻找到相应的数据库实例进程,然后spawned一个新的数据库连接,这个连接端口由Network Listener 传递给客户机,此后客户机就不再和打交道了,即使Listener停止了工作。这个新的连接端口是不可预知的,因而会被防火墙阻止或没有进行端口映射。 Windows Socket 2 规范有一个新的特性,就是Shared Socket, 所谓共享套接字是指一个进程共享另一个进程的套接字(详见MSDN相关参考)。如果让Network Listener 与数据库服务进程共享套接字,那么连接端口就不会变化。

从以上资料来看,访问该数据库必须关闭防火墙的问题原因也是由此引起的。

具体的解决步骤如下:

1、通过修改注册表设置Shared Socket。

在注册表:HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0

新建一个字符串值:USE_SHARED_SOCKET,值设置为:true

如果安装了多个目录

则每个目录都要设置:HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMEx(x目录编号)

2、设置mts_dispatchers参数(要以dba身份登录oracle数据库(SYS))

SQL> alter system set mts_dispatchers='(PROTOCOL=TCP)(disptchers=1)';

原创粉丝点击