`
etsoft
  • 浏览: 12155 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

在windows server 2003系统防火墙上开放Oracle服务端口 连接1521 TNS超

阅读更多

【转载】http://hi.baidu.com/%C2%ED%D3%C0/blog/item/31f4ee03b99704e808fa9325.html

 

 

 

要使Oracle客户端能正常连接到设置有防火墙的Oracle服务器,单开放一个1521或自定义的监听端口是不够的。

  服务器装成Windows2003了,并开放了系统自带的防火墙,在连接中发现在防火墙上打开监听端口1521后还是无法连通,报TNS连接超时错误。于是试将防火墙关闭,就可以连通,说明还有什么端口未打开所致。
  当我打开1521端口时,连接操作仍然失败。我又怀疑网络有问题,用telnet server_ip:1521尝试,连接被接受,说明1521端口已经被打开。

没有办法,查询Oracle资料后才明白,network listener 只起一个中介作用,当客户连接它时,它根据配置寻找到相应的数据库实例进程,然后spawned一个新的数据库连接,这个连接端口由network listener传递给客户机,此后客户机就不再和打交道了,即使listener停止了工作。这个新的连接端口是不可预知的,因而会被防火墙阻止。

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 原文:

USE_SHARED_SOCKET

You can set the USE_SHARED_SOCKET parameter to TRUE to enable the use of shared sockets. If this parameter is set to TRUE, the network listener passes the socket descriptor for client connections to the database thread. As a result, the client does not need to establish a new connection to the database thread and database connection time improves. Also, all database connections share the port number used by the network listener, which can be useful if you are setting up third-party proxy servers.

On Windows NT 4.0 Service Pack3 or earlier, enabling this option precludes bringing the network listener up or down in a case where a database connection spawned by the network listener is active. Therefore, you may
need to shut down all of the databases serviced by a network listener before you can bring down and restart a network listener. This results from the way shared sockets have been implemented in WINSOCK2. WINSOCK2 does not
allow a reliable thread to a network listener on any port on which other connections are also active. This is not an issue on Windows NT 4.0 Service Pack 4 orlater. Oracle recommends that you upgrade to Windows NT 4.0 Service Pack 4 if you intend to set this parameter.

This parameter only works in dedicated server mode in a TCP/IP environment. If this parameter is set, you cannot use the 8.1.5 listener to spawn Oracle 7.x databases. To spawn an Oracle 8.0.x database from an 8.1.5 listener

Oracle客户端连接服务器,首先去找1521监听端口,服务器的1521监听端口再向server process进程发出请求,并返回一个随机端口,返回给客户端,客户端再来连接这个端口。 这样就给服务器上的防火墙设置带来了麻烦,这个端口是随机的,如何开放?
windows 平台上的这个问题成了一大难题,很多论坛都有人问,但很少有人能解决。 unix平台不用担心,系统自动会解决这个问题.

windows 平台上的这个问题成了一大难题,很多论坛都有人问,但很少有人能解决。 unix平台不用担心,系统自动会解决这个问题. Matalink上提供了三种解决办法,实际上USE_SHARED_SOCKET 是最有效最方便的。但经过无数次实现,仍然没有成功,最后终于发现是Oracle 8.1.7的bug 需要打补丁,升级到Oracle 8.1.7.1.2
需要在MTS模式下(共享模式)

需要在MTS模式下(共享模式) Oracle默认是专用模式。
经试验发现,如果不在init文件中设参数的话,Oracle仍然会要求一个随机端口和1521端口来共同通讯,只是这个随机端口,并不随客户端会话和登录的变化而变化,在没有重启服务器时,是固定的。

经试验发现,如果不在init文件中设参数的话,Oracle仍然会要求一个随机端口和1521端口来共同通讯,只是这个随机端口,并不随客户端会 话和登录的变化而变化,在没有重启服务器时,是固定的。 (试验发现,在专用模式下,每次连接,oracle服务器会按+1方式,提供一个非1521的端口。) 所以,还需要在init.ora文件的最后加上一条参数:
mts_dispatchers="(address=(protocol=tcp)(host=myoradb)(port=1521))(dispatchers=1)"
这样才真正实现只用一个端口,穿过防火墙。

这样才真正实现只用一个端口,穿过防火墙。 参考资料:
Oracle uses dynamic ports under windows NT because of a bug in windows, so oracle can't use shared sockets. This bug got fixed with service pack 3 I think. By default, oracle uses the dynamic ports without caring which service pack is installed. There is a registry setting to force oracle to use shared sockets. The parameter is (what a surprise!) USE_SHARED_SOCKET in LOCAL_MACHINE\Software\Oracle\HomeX where X is your desired homedir. This parameter should be set to TRUE. There's a whitepaper from oracle for this too, somewhere on their site. Anyway, this parameter doesnt work for 8.1.7 Some users reported that it worked with 8.1.6.3, but 8.1.7 termiates every conection immediately...

Oracle uses dynamic ports under windows NT because of a bug in windows, so oracle can't use shared sockets. This bug got fixed with service pack 3 I think. By default, oracle uses the dynamic ports without caring which service pack is installed. There is a registry setting to force oracle to use shared sockets. The parameter is (what a surprise!) USE_SHARED_SOCKET in LOCAL_MACHINE\Software\Oracle\HomeX where X is your desired homedir. This parameter should be set to TRUE. There's a whitepaper from oracle for this too, somewhere on their site. Anyway, this parameter doesnt work for 8.1.7 Some users reported that it worked with 8.1.6.3, but 8.1.7 termiates every conection immediately... Contributed by Arne Brutschy (abrutschy@xylon.de ) on July 5, 2001.
Actually, I want to establish a replication system in my local machine.. for replicating objects(tables) from remote database to a local database... what data security option i must take in to account. I request you to give me the detail description like which protocal must be used and what parameter must be set in init.ora file,sqlnet.ora and listener.ora file and what other steps to be taken... I would be very thankful to you ... if you kindly describe the things...actually i want to maintain the data privacy which happens between remote and local database while replication take place.. any one can trap the net and extract the data ... so i need to stop that.

Actually, I want to establish a replication system in my local machine.. for replicating objects(tables) from remote database to a local database... what data security option i must take in to account. I request you to give me the detail description like which protocal must be used and what parameter must be set in init.ora file,sqlnet.ora and listener.ora file and what other steps to be taken... I would be very thankful to you ... if you kindly describe the things...actually i want to maintain the data privacy which happens between remote and local database while replication take place.. any one can trap the net and extract the data ... so i need to stop that. I would be very thankful to you ... this is a request.. please mail me on the address p_v_raju73@rediffmail.com .
regards p.v.raju

regards p.v.raju Contributed by pvraju (p_v_raju73@rediffmail.com ) on October 8, 2001.
Modify Windows registry.
USE_SHARED_SOCKET = TRUE

Modify Windows registry.
USE_SHARED_SOCKET = TRUE - Oracle 8.1.6 for NT/2k \\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME <#> (# is your desired homedir)
- Oracle 8.1.7.0.0 for NT/2k Doesn't work in Oracle 8.1.7.0.0 for NT/2k
- Oracle 8.1.7.1.2 for NT/2k \\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

分享到:
评论
1 楼 AndyGu 2009-02-21  
多谢,我的问题终于解决了,这两天在网上找了很多资料都没用,现在全部OK,谢谢

相关推荐

    Oracle数据库-TNS连接

    Oracle数据库-TNS连接是Oracle数据库系统中用于网络通信的关键组件,它允许客户端应用程序与服务器端的数据库进行交互。TNS,全称为Transparent Network Substrate,透明网络子结构,是Oracle数据库提供的一种网络...

    oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法

    错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...

    windows server 2003 Oracle10g 安装

    ### Windows Server 2003 上安装 Oracle 10g 数据库 #### 一、环境搭建:Windows Server 2003 的安装 虽然题目中提到不在本文档中详细描述 Windows Server 2003 的安装步骤,但在实际操作中确保安装成功至关重要。...

    Windows Server 2016 Oracle 12C安装连接的若干问题处置方法

    ### Windows Server 2016 上 Oracle 12C 安装及连接问题处置方法 #### 一、概述 在Windows Server 2016环境下部署Oracle 12C数据库时,由于版本更新带来的变动较大,加之缺乏相关维护经验,可能会遇到一系列连接...

    oracle常用端口号

    - **1521**:这是最著名的Oracle端口之一,用于监听TNS(透明网络服务)连接请求。TNS是Oracle数据库用于客户端与服务器之间通信的一种协议。通过该端口,客户端可以连接到Oracle实例上运行的数据库服务。 - **21**...

    sql_server连接Oracle方法(最全)

    SQL Server 连接 Oracle 方法是数据库管理系统中的一个重要话题。本文将详细介绍如何在 SQL Server 中连接 Oracle 数据库,并解决在连接过程中可能出现的问题。 安装 Oracle 客户端程序 在 SQL Server 所在服务器...

    windows server2008安装oracle11g-详细笔记总结

    本文将详细介绍如何在 Windows Server 2008 上安装 Oracle 11g,包括安装前的准备工作、安装过程、安装后的配置和基本操作。 一、安装前的准备工作 在安装 Oracle 11g 之前,需要关闭防火墙,以免安装过程中出现...

    sqlserver连接oracle

    在 Windows 操作系统中,需要配置 ODBC 数据源以连接 Oracle 数据库。步骤如下: 1. 打开开始菜单,选择“设置”、“管理工具”、“数据源(ODBC)”,进入配置用户 DSN 或系统 DSN。 2. 添加新的数据源,选择...

    本地连接远程oracle服务器需要的配置文件

    在IT行业中,Oracle数据库系统是广泛应用的企业级关系型数据库管理系统,尤其在大型企业和关键业务系统中占据重要地位。为了能够本地连接到远程Oracle服务器,你需要正确的配置文件和工具。在这个场景下,"oci.dll...

    windows Server2008 64位PHP如何连接Oracle数据库

    ### Windows Server 2008 64位环境下PHP连接Oracle数据库详解 #### 一、概述 在Windows Server 2008 64位环境下使用PHP连接Oracle数据库是一项常见需求,尤其对于需要进行跨平台数据处理的应用而言更是如此。本...

    Oracle导dmp出现文件ORA-12154 TNS 无法解析指定的连接标识符解决方案

    其中,`&lt;your_host&gt;`应替换为数据库服务器的实际IP地址或主机名,`&lt;your_port&gt;`为监听端口,默认情况下通常是`1521`,`&lt;your_service_name&gt;`应替换为你想要连接的数据库服务名。 ### 步骤三:设置环境变量 确保已...

    SQL SERVER 安装ORACLE provider for OLE DB 的连接服务驱动

    在标题中提到的"SQL SERVER 安装ORACLE provider for OLE DB 的连接服务驱动"过程中,我们需要做以下几个步骤: 1. **下载和准备**:首先,你需要下载Oracle Instant Client,这通常包含在提供的"instantclient_11_...

    Oracle数据库监听器(LISTENER)和本地服务名(Tnsname)配置.docx

    本文主要介绍 Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)的配置,旨在帮助读者了解 Oracle 网络连接配置的主要组件和配置方法。 一、监听器(LISTENER) 监听器是 Oracle 基于服务器端的一种网络服务,...

    Windows上Oracle开放防火墙端口问题参考.pdf

    - 在Windows防火墙中设置开放TCP 1521端口(Oracle TNS Listener)。 - 使用`telnet oracle服务器ip 1521`命令测试端口是否已成功开放。 - 结合以上任一方法,确保远程客户端能够正常访问数据库。 #### 总结 ...

    pl/sql developer 免安装oracle客户端连接远程Oracle服务器 windows 方法以及相关dll

    本文将详细讲解如何在Windows操作系统上,利用PL/SQL Developer这款强大的Oracle数据库管理工具,建立一个免安装的Oracle客户端,以连接远程Oracle服务器,并涉及与之相关的DLL文件配置。 首先,PL/SQL Developer是...

    Oracle_TNS浅析.doc

    ### Oracle TNS浅析 #### 一、Oracle TNS简介 **TNS( Transparent Network ...正确配置TNS不仅能够提高网络连接的效率和稳定性,还能增强系统的安全性。理解TNS的基本概念及其配置方法对于Oracle DBA来说至关重要。

    ORACLE_TNS协议

    Oracle TNS(Transparent Network Substrate)协议是Oracle数据库系统中用于网络通信的一种协议,它为客户端应用程序提供了一种透明的方式连接到Oracle数据库服务器。TNS协议处理了网络连接的复杂性,使得用户无需...

    oracle jdbc + ssl+ tns 实战代码

    通过oracle jdbc thin 驱动连接oracle数据库的客户端程序,在连接中应用了SSL、钱包、双向认证、Secure External Password Store tns配置等技术,完全实战代码,非常有参考价值。

    Oracle19C RAC通过gateways连接SQL server数据库

    在本场景中,我们探讨的是如何在Oracle 19C RAC环境中通过Oracle数据库网关(Gateway)连接到SQL Server 2012数据库。Oracle Gateway使得不同数据库系统间的数据交互成为可能,实现异构数据库间的透明访问。 首先,...

Global site tag (gtag.js) - Google Analytics