Windows平台的Oracle使用USE_SHARED_SOCKET的作用
来源:互联网 发布:淘宝买家秀兼职微信群 编辑:程序博客网 时间:2024/06/18 18:50
前两天有位朋友在QQ群问了一个问题,背景如下:
继续问后,有如下回复:
1、对方服务器连接无问题。
3、tnsping正常。
4、对方服务器没有设置IP信任。
5、windows 2003 server,Oracle 10.1.0.2.0
但从客户端sqlplus就是超时,无法连接。
首先,看下ORA-12170的定义:
oerr ora 12170
// *Action: If the error occurred because of a slow network or system, reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT, SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values.
If a malicious client is suspected, use the address in sqlnet.log to identify the source and restrict access. Note that logged addresses may not be reliable as they can be forged (e.g. in TCP/IP).
大致意思就是因网络或系统问题超时。
然后建议他能sqlnet.ora添加trace配置,看下sqlplus的跟踪:
TRACE_LEVEL_CLIENT=16
TRACE_FILE_CLIENT=CLIENT
TRACE_TIMESTAMP_CLIENT=ON
trace_directory_client=一个路径
但此时反馈说服务端的支持人员已经开启了Oracle共享连接,现在可以sqlplus。
现在问题就出来了,什么是Oracle共享连接?做了什么配置就可以从客户端访问了?为什么会出现这个问题?
总结来说,这个问题是和Oracle运行于Windows平台相关的。对于运行于Windows平台的,从客户端发起一个连接请求时,服务端监听会让客户端重定向另外一个随机端口。既然是一个随机端口,那么防火墙自然不会允许这个连接。因此会出现从客户端可以telnet监听端口,但sqlplus就是超时,无法连接。究其原因就是由于客户端真正和Oracle线程通信时使用的随机端口会被防火墙拒绝。这种情况只会发生在Windows平台,因为UNIX之类的平台是默认支持端口共享的,不会出现端口被防火墙拒绝的现象。
可行的解决方案有两种,
1. 使用包含内建SQL*Net代理的防火墙。
流程:
1. 连接代理,将连接传给监听。
2. 发送客户端重定向地址。
3. 通过代理连接重定向地址。
4. Oracle接受连接。
2. 升级数据库到8.0.x以上,设置注册表中USE_SHARED_SOCKET变量值为TRUE。
监听器会在“listener.ora”文件中指定的地址上绑定和创建一个socket。在这个socket中,监听器的监听状态是ACTIVE。当监听器接收连接请求时,监听器会在监听端口派生一个Oracle线程。这种情况会反复产生,以至于最后形成了一个监听器和一些已建立的连接都在使用1521端口的闭环。
从10.2以上的,USE_SHARED_SOCKET就已经是默认值为TRUE了,无需再修改。
MOS的124140.1文章详细介绍了这部分内容,翻译原文如下:
In Oracle release 9 or later \\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\Key_<Home>
C:\>netstat -anActive ConnectionsProto Local Address Foreign Address StateTCP 0.0.0.0:1521 0.0.0.0:0 LISTENINGTCP 198.51.100.9:1521 198.51.100.6:55769 ESTABLISHEDTCP 198.51.100.9:1521 198.51.100.91:13452 ESTABLISHEDTCP 198.51.100.9:1521 198.51.100.92:13203 ESTABLISHEDTCP 198.51.100.9:1521 198.51.100.92:13202 ESTABLISHEDTCP 198.51.100.9:1521 203.0.113.166:12331 ESTABLISHEDTCP 198.51.100.9:1521 203.0.113.10:12123 ESTABLISHEDTCP 198.51.100.9:1521 203.0.113.10:11252 ESTABLISHEDTCP 198.51.100.9:1521 192.0.2.22:14524 ESTABLISHEDTCP 198.51.100.9:1521 192.0.2.20:13524 ESTABLISHEDTCP 198.51.100.9:1521 192.0.2.102:13452 ESTABLISHEDTCP 198.51.100.9:1521 192.0.2.121:1342 ESTABLISHED
TRACE_DIRECTORY_CLIENT = <directory>
TRACE_FILE_DIRECTORY= <filename>[Insert code here]
- Windows平台的Oracle使用USE_SHARED_SOCKET的作用
- 使用批处理启动Windows平台上的Oracle服务
- windows平台下oracle数据库的备份
- Windows平台卸载Oracle的方法
- 【Oracle】windows平台 Oracle12c 的安装教程
- 在windows平台上解决oracle.exe的cpu使用高的问题
- Windows API的作用及使用技巧
- Windows平台使用RMAN命令自动删除Oracle过期归档日志的方法
- windows平台使用的linux工具
- Windows平台下libevent库的使用
- Git 工具的使用,windows平台安装
- Windows平台下管道的使用
- windows平台下clang_checker的使用
- Windows平台中Oracle11gR2使用的服务
- Windows平台下管道的使用
- CAFFE 在windows平台的使用
- windows平台tensorboard的配置及使用
- windows平台下的oracle ORA-01031的解决方法
- SoftReference
- easyUI,IE11,打开同一界面报错
- crm2011制作报表使用预筛选
- openstack api 指南(转)
- perl函数说明(exists)
- Windows平台的Oracle使用USE_SHARED_SOCKET的作用
- 人类脑对脑接口实验首获成功:可遥控同伴
- Spring 任务调度
- DCOM远程调用权限设置
- maven详解之生命周期与插件(二)
- 图片阵列显示,采用tablerow、imageview。
- ae事件库
- perl函数说明(exit)
- Linux i2c设备驱动编写(一)