windows服务器 oracle 本地可访问,远程无法访问,The Network Adapter could not establish the connection

转自:https://blog.csdn.net/Dracotianlong/article/details/21735475

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。

二、在防火墙中设置程序例外

在windows的防火墙中首先设置1521端口例外,然后设置程序例外

在oracle安装目录下的bin文件夹下选择oracle.exe,即可解决客户端无法访问的问题。


    
--------------------- 
作者:DracoTianlong 
来源:CSDN 
原文:https://blog.csdn.net/Dracotianlong/article/details/21735475 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值