问题是这样:客户端想访问不在同一网段上的数据库服务器,中间有一防火墙。在防火墙里加上规则限制,需要哪些服务就开哪些端口。打开了1521端口,但是连接数据库失败。如果防火墙不加规则,全部打开,那么连接数据库成功。
.....后来经查证发现是这样:Oracle客户端连接服务器(win2000 sever,oracle9i),首先去找1521端口,服务器的1521端口再向server process进程发出请求,并返回一个随机端口,返回给客户端,客户端再来连接这个端口。这样就给服务器上的防火墙设置带来了麻烦,这个端口是随机的,如何开放?然后我们查了很多资料,说是要用connection manger,还要修改客户端的TNSNAMES.ORA文件,还有服务器端的cman.ora文件,还有什么来着........,东西很多,而且都是英文的,很晦涩,不是非常明白.
朋友,如果你会的话一定要可怜可怜我啊........

解决方案 »

  1.   

    试 下穿过防火墙连接数据库 
    这个问题只会在WIN平台出现,UNIX平台会自动解决。
    解决方法:
    在服务器端的SQLNET.ORA应类似
    SQLNET.AUTHENTICATION_SERVICES= (NTS) 
    NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME) 
    TRACE_LEVEL_CLIENT = 16 
    注册表的HOME0加[HKEY_LOCAL_MACHINE] 
    USE_SHARED_SOCKET=TRUE
      

  2.   

    通常ftp采用Passive模式的时候,也是这样工作的。
    检查一下防火墙关于ftp的设置把。有些防火墙有这种特殊端口设置的。具体要问问厂家才行。
      

  3.   

    to:LGQDUCKY(飘)
    你说的这种方法是适用于oracle8i的阿,对于9i并不适用
      

  4.   

    1521只是监听的断开.真正连接的还有其他端口.
    在防火墙中应该有一组sql net的选项的,将之开放就可以了.
      

  5.   

    1521只是监听的端口.真正连接的还有其他端口.
    在防火墙中应该有一组sql net的选项的,将之开放就可以了.
      

  6.   

    1521只是监听的端口.真正连接的还有其他端口.
    在防火墙中应该有一组sql net的选项的,将之开放就可以了.
      

  7.   

    不同的放火墙,选项可能都不同.
    不过应该都有sql net这种类似的选项的
      

  8.   

    to:GerryYang(轻尘)你做过这样的问题吗?能给点你做的案例内容吗?
      

  9.   

    Oracle客户端穿过防火墙连接服务器  Oracle客户端连接服务器,首先去找1521监听端口,服务器的1521监听端口再向server process进程发出请求,并返回一个随机端口,返回给客户端,客户端再来连接这个端口。 这样就给服务器上的防火墙设置带来了麻烦,这个端口是随机的,如何开放?  windows 平台上的这个问题成了一大难题,很多论坛都有人问,但很少有人能解决。 unix平台不用担心,系统自动会解决这个问题. Matalink上提供了三种解决办法,实际上USE_SHARED_SOCKET 是最有效最方便的。 但经过无数次实现,仍然没有成功,最后终于发现是Oracle 8.1.7的bug 需要打补丁,升级到Oracle 8.1.7.1.2   需要在MTS模式下(共享模式) Oracle默认是专用模式。 经试验发现,如果不在init文件中设参数的话,Oracle仍然会要求一个随机端口和1521端口来共同通讯,只是这个随机端口,并不随客户端会话和登录的变化而变化,在没有重启服务器时,是固定的。   (试验发现,在专用模式下,每次连接,oracle服务器会按+1方式,提供一个非1521的端口。) 所以,还需要在init.ora文件的最后加上一条参数: mts_dispatchers="(address=(protocol=tcp)(host=myoradb)(port=1521))(dispatchers=1)" 这样才真正实现只用一个端口,穿过防火墙
      

  10.   

    to:lemon223(oracle)
    你说的这种方法适用于oracle8i,也就是共享套接字USE_SHARED_SOCKET方法,对于9i并不适用,
    “需要在MTS模式下(共享模式) ”及其后面文字是对USE_SHARED_SOCKET的补充还是另一种解决这个问题的方法,请明示。万分感谢......
      

  11.   

    我的是oracle9.2.0.1版本,试验了一下,可以了。需要说明的是我在dedicated server模式下是成功的,但在shared server模式下还没有成功。
      

  12.   

    在msn上跟你说话,怎么不回?
      

  13.   

    方法一:在windows2000的注册表中,hkey_local_machine\software\oracle\home0\下加入字符串值:
             USE_SHRED_SOCKET=TRUE,即可
    方法二:1、首先将数据库实例改为SHARE 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端口。
      

  14.   

    方法三:在数据库端(也可以是另外的机器,但是cman的机器必须和数据库都在防火墙的后面)安装了cman的前提下,启动cman,然后开放防火墙端的1630端口(看cman开的是什么端口啦),最后在客户端的tnsnames.ora文件中添加:
              cmantest = (description = (address_list = (address = <- first address is to CMAN (protocol=tcp) (host=hostname or ip of cman) (port=1610) ) (address= <- second address is to Listener (protocol=tcp) (host=hostname or ip of listener) (port=1521) ) ) (connect_data = (sid = sidname)) (source_route = yes)
      

  15.   

    这个功能好像需要防火墙支持吧,不是所有厂家的防火墙都支持oracle数据库的。
    回来的端口是动态的,像ftp一样。大多数fw都支持ftp,但支持oracle的不是大家都有。
      

  16.   

    哈哈,防火墙上上支持oralce的协议簇的话,可以基本不用设置了
      

  17.   

    类似的问题,请教大哥们:
      连接公网上的一个oracle数据库,客户端再一个公司内网里,对数据库的连接如果2-3分钟没有操作就提示通道文件已经结束。请教各位应该如何解决???是不是防火墙的问题????这样写数据库连接部分用啥办法能让这个连接一直有效??