Windows上Oracle开放防火墙端口问题
安装完Windows版的Oracle 10G 后,开启了windows 2003自带的防火墙,发现在本机可以访问oracle数据库,但在远程不能连接,一直都在报连接超时。关闭防火墙后,可以用远程连接Oracle 10G 数据库。但开启防火墙后,又不能连接,说明问题出在防火墙上,防火墙开启TCP 1521端口,仍然不能连接数据库。解决问题的办法如下:
1.如果是Oracle 8i ,修改注册表HKLM\Software\Oracle,增加一个字符串值USE_SHARED_SOCKET = TRUE。
2.如果是非Oracle 9i,打开%Oracle_Home%\bin\oracle.key文件,按里面的路径HKLM增加一个字符串值USE_SHARED_SOCKET = TRUE。
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0]
"USE_SHARED_SOCKET"="TRUE"
3.增加以后重启机子让注册表生效
问题描述:
要使Oracle客户端能正常连接到设置有防火墙的安装在windows上的Oracle服务器,单开放一个1521或自定义的监听端口是不够的。
unix平台不用担心,系统自动会解决这个问题.,只需要开放一个1521端口就行。
在windows系统下,Oracle客户端连接服务器,首先去找1521监听端口,服务器的1521监听端口再向server process进程发出请求,并返回一个随机端口给客户端,客户端再来连接这个端口和数据库进行通信。
监听端口之外的这个新的连接端口是不可预知的,因而会被防火墙阻止。如何做到只开放1521端口就能正常访问Oracle数据库?下面我们来具体介绍解决此问题的方法。
解决方案一:
Windows Socket2 规范有一个新的特性,就是Shared Socket, 所谓共享套接字是指一个进程共享另一个进程的套接字(详见MSDN相关参考)。如果让network listener与数据库服务进程共享套接字,那么连接端口就不会变化。
如何设置Shared Socket?
在注册表:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE \HOME0上新建一个字符串值:USE_SHARED_SOCKET=true。如果安装了多个目录,则每个类似的目录都要设置:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEx (x目录编号) 设置后要求重新启动oracle数据库服务(只通过sqlplus工具shutdown后,再startup数据库发现没有效果)。
解决方案二:
1、 在Windows防火墙上设置开放 TCP 1521端口(Oracle TNSListener),使用telnet oracle服务器ip 1521 测试端口是否开放;
2、打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0,新建一个字符串值:USE_SHARED_SOCKET=true;
3、修改Oracle数据库操作模式,默认为“专用服务器模式”,修改为“共享服务器模式”。可以使用Database Configuration Assistant工具修改;
4、重新启动Oracle数据库实例。
Oracle 9i 在window 2003防火墙设置 2009-06-25 Oracle客户端连接服务器,首先去找1521监听端口,服务器的1521监听端口再向server process进程发出请求,并返回一个随机端口,返回给客户端,客户端再来连接这个端口。这样就给服务器上的防火墙设置带来了麻烦,这个端口是随机的,如何开放?
windows 平台上的这个问题成了一大难题,很多论坛都有人问,但很少有人能解决。unix平台不用担心,系统自动会解决这个问题.
Matalink上提供了三种解决办法,实际上USE_SHARED_SOCKET 是最有效最方便的。
方法一:
在windows2003的注册表中,hkey_local_machine\software\oracle\home0\下加入字符串值: USE_SHARED_SOCKET=TRUE,在服务器上开启TCP“1521”端口,重启ORCALE服务器即可!
方法二:
1、首先将数据库实例改为SHARED SERVER模式
2、以SYSDBA登录SQLPLUS,通过SQLPLUS生成系统当前的参数设置文件pfile:create pfile='d:\init.ora' from spfile;
3、修改d:\init.ora文件,在其中增加(用editplus编辑):*.service_names='your service name'和*.dispatchers='(address=(protocol=tcp)(host=localhost)(port=1521)(dispatchers=1)'
4、生成新的SPFILE:create spfile from pfile='d:\init.ora';
5、重启动数据库。
6、在防火墙中开放1521端口。
方法三:
在数据库端(也可以是另外的机器,但是cman的机器必须和数据库都在防火墙的后面)安装了cman的前提下,启动cman,然后开放防火墙端的1630端口(看cman开的是什么端口啦),最后在客户端的tnsnames.ora文件中添加:
cmantest = (description = (address_list = (address =