Oracle 本机能够连接,局域网内其他无法连接的解决方法(Oracle与防火墙设置)
2014-03-10 15:57
1166 查看
Oracle与防火墙设置
要访问防火墙后的windows oracle数据库,仅仅通过简单的打开固定TCP端口的方式是不行的。
这个问题的根本原因是windows oracle数据库的BT设计(unix/linux无此问题)。
一、Oracle的网络通信端口原理
oracle数据库的网络访问采用了一个很BT的工作模式,其大概流程如下:
1)oracle server上的oracle net listener进程持续监听一个固定的TCP端口(缺省是1521);
2)client向server上的net listener端口发起连接请求;
3)listenr收到client的请求之后,建立与client的连接,并通知server新建一个数据库连接的服务进程(以下简称P),该进程会随机选择一个没有被使用的TCP端口并绑定,然后将端口号通知listener;
4)listenr将P绑定的端口号转发给client;
5)client收到P的端口号后,终止与listener的连接,然后通过P的绑定端口直接连接P;
到第5步,连接才最终完成,之后client就可以访问数据库了。
从上面的工作流程可以知道,在这种工作模式下,client实际最终连接的oracle server端口是随机的。
所以根本无法在防火墙上预先设定固定的TCP端口来使oracle server可以被访问。
据说oracle这么做也是不得已的,因为早期windows nt的TCP/IP部分有bug,直接使用公用端口连接会有问题,所以oracle才搞出这么个天才的设计。
不过,NT4SP3之后不就没这个bug了吗,为啥到oracle 11g了还在用这个BT模式呢? 当然啦,现在网络安全性问题这么严重,如果真的无法使用防火墙,windows版的oracle数据库岂不是要卖不出去了吗?
oracle公司当然不会那么白痴,从oracle 8i开始,windows版的oracle也可以使用正常的工作模式了,只不过默认仍是使用BT工作模式罢了。
只有Windows平台上的9i及以下版本的Oracle才会有这个问题。Oracle在Linux以及Unix平台下,多个进程间可以对端口进行复用,Oracle Server Process仍然使用的是跟监听进程一个端口(1521),客户端只连接了一次,并没有进行第二次连接,与上面描述的流程相比已经发生了变化。
在Windows平台上,10g及以上版本的数据库,也同样利用端口复用,避免了这样的问题。实际上10g就是默认USE_SHARED_SOCKET为TRUE。
二、在防火墙中设置程序例外
在Oracle的BT模式下,其实可通过在防火墙中设置Oracle程序例外来穿越防火墙。
windowsXp系统:
windows Server 2012版本修改
增加监听和oracle
三、在防火墙中设置端口例外
在windows注册表的 (HOMEDIR是你机器上安装的oracle数据库的instance名称)中添加一个字符串键值,名称为USE_SHARED_SOCKET,值为TRUE(注意大小写),然后重启oracle instance或直接重启windows就OK了。
这样,你只要再在防火墙上打开oracle的监听端口(缺省为1521),就可以在防火墙外访问oracle了!
需要在MTS模式下(共享模式) Oracle默认是专用模式。
经试验发现,如果不在init文件中设参数的话,Oracle仍然会要求一个随机端口和1521端口来共同通讯,只是这个随机端口,并不随客户端会话和登 录的变化而变化,在没有重启服务器时,是固定的。 (试验发现,在专用模式下,每次连接,oracle服务器会按+1方式,提供一个非1521的端口。) 所以,还需要在init.ora文件的最后加上一条参数:
mts_dispatchers="(address=(protocol=tcp)(host=myoradb)(port=1521))(dispatchers=1)"
要访问防火墙后的windows oracle数据库,仅仅通过简单的打开固定TCP端口的方式是不行的。
这个问题的根本原因是windows oracle数据库的BT设计(unix/linux无此问题)。
一、Oracle的网络通信端口原理
oracle数据库的网络访问采用了一个很BT的工作模式,其大概流程如下:
1)oracle server上的oracle net listener进程持续监听一个固定的TCP端口(缺省是1521);
2)client向server上的net listener端口发起连接请求;
3)listenr收到client的请求之后,建立与client的连接,并通知server新建一个数据库连接的服务进程(以下简称P),该进程会随机选择一个没有被使用的TCP端口并绑定,然后将端口号通知listener;
4)listenr将P绑定的端口号转发给client;
5)client收到P的端口号后,终止与listener的连接,然后通过P的绑定端口直接连接P;
到第5步,连接才最终完成,之后client就可以访问数据库了。
从上面的工作流程可以知道,在这种工作模式下,client实际最终连接的oracle server端口是随机的。
所以根本无法在防火墙上预先设定固定的TCP端口来使oracle server可以被访问。
据说oracle这么做也是不得已的,因为早期windows nt的TCP/IP部分有bug,直接使用公用端口连接会有问题,所以oracle才搞出这么个天才的设计。
不过,NT4SP3之后不就没这个bug了吗,为啥到oracle 11g了还在用这个BT模式呢? 当然啦,现在网络安全性问题这么严重,如果真的无法使用防火墙,windows版的oracle数据库岂不是要卖不出去了吗?
oracle公司当然不会那么白痴,从oracle 8i开始,windows版的oracle也可以使用正常的工作模式了,只不过默认仍是使用BT工作模式罢了。
只有Windows平台上的9i及以下版本的Oracle才会有这个问题。Oracle在Linux以及Unix平台下,多个进程间可以对端口进行复用,Oracle Server Process仍然使用的是跟监听进程一个端口(1521),客户端只连接了一次,并没有进行第二次连接,与上面描述的流程相比已经发生了变化。
在Windows平台上,10g及以上版本的数据库,也同样利用端口复用,避免了这样的问题。实际上10g就是默认USE_SHARED_SOCKET为TRUE。
二、在防火墙中设置程序例外
在Oracle的BT模式下,其实可通过在防火墙中设置Oracle程序例外来穿越防火墙。
windowsXp系统:
windows Server 2012版本修改
增加监听和oracle
三、在防火墙中设置端口例外
在windows注册表的 (HOMEDIR是你机器上安装的oracle数据库的instance名称)中添加一个字符串键值,名称为USE_SHARED_SOCKET,值为TRUE(注意大小写),然后重启oracle instance或直接重启windows就OK了。
这样,你只要再在防火墙上打开oracle的监听端口(缺省为1521),就可以在防火墙外访问oracle了!
需要在MTS模式下(共享模式) Oracle默认是专用模式。
经试验发现,如果不在init文件中设参数的话,Oracle仍然会要求一个随机端口和1521端口来共同通讯,只是这个随机端口,并不随客户端会话和登 录的变化而变化,在没有重启服务器时,是固定的。 (试验发现,在专用模式下,每次连接,oracle服务器会按+1方式,提供一个非1521的端口。) 所以,还需要在init.ora文件的最后加上一条参数:
mts_dispatchers="(address=(protocol=tcp)(host=myoradb)(port=1521))(dispatchers=1)"
相关文章推荐
- msn无法登陆,防火墙设置阻止MSN的连接服务解决方法
- oracle服务器本地能够登录但是局域网内其他机器不能访问的解决方法
- oracle服务器本地能够登录但是局域网内其他机器不能访问的解决方法
- IE9.0 设置无法保存解决方法 其他版本也可以这么做
- chrome无法连接到代理服务器,IE也上不了,但是QQ可以登陆,其他软件可以用的解决方法
- Win 7 下Navicat无法连接64位Oracle 11gR2:Cannot load OCI DLL解决方法
- oracle中监听程序当前无法识别连接描述符中请求服务 的解决方法
- 局域网中win7旗舰版的两台电脑无法连接远程桌面的解决方法
- 关于Win7 64位下:Navicat无法连接64位Oracle 11gR2:Cannot load OCI DLL 87 解决方法
- Oracle出现“TNS: 监听程序无法分发客户机连接”解决方法
- .net程序无法连接oracle9.2.0.1数据库解决方法
- 安装oracle 11G-----( ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务)的解决方法
- Oracle客户端连接Centos5.8防火墙:ORA-12560: TNS: 协议适配器错误的解决方法
- 在Linux环境下mysql的root密码忘记解决方法 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 2.修改MySQL的登录设置: # vi /etc/my.c
- 解决中64位Win7系统上PLSQL无法连接ORACLE的方法(PLSQL无法识别ORACLE_HOME的配置)
- Oracle 数据库PL/SQL ORA -12154 TNS:无法解析指定的连接标识符解决方法
- 解决中64位Win7系统上PLSQL无法连接ORACLE的方法(PLSQL无法识别ORACLE_HOME的配置)
- Oracle出现“TNS: 监听程序无法分发客户机连接”解决方法
- IIS网站本机可以访问但局域网其他机器无法访问 解决方法
- oracle 11g ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决方法