客户端连接oracle的过程:
client进程首先与listener建立TCP连接,然后listener产生一个server进程并将server进程地址返回给client进程,之后client进程与该server进程建立TCP连接,由server进程完成数据库操作,并将结果返回给client端。对于UNIX系统,由于server进程是由listener创建的(fork),server进程将继承listener进程的资源,即使用相同的file handle和tcp socket。对于windows socket1.1而言,server线程与listener无法共享TCP socket。server线程会随机地选择一个TCP端口与client进行连接。而windows socket2支持shared socket,可以实现一个进程共享另一个进程的TCP socket。
如果需要从外网访问oracle,需做如下设置:
UNIX系统:
只需要在防火墙上开放监听端口。
WINDOWS系统:
1、在防火墙上开放监听端口。
2、设置Shared Socket (Windows Socket2支持)。设置方法:
在注册表:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0上新建一个字符串值:USE_SHARED_SOCKET=TRUE。如果安装了多个目录,则每个类似的目录都要设置:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEx (x目录编号).
设置后要重启实例.
如果windows不支持shared socket,则要在防火墙上开放所有端口。