zoukankan      html  css  js  c++  java
  • Oracle客户端穿过防火墙连接服务器 -zt

    Oracle客户端穿过防火墙连接服务器

    Oracle客户端穿过防火墙连接服务器 

    Oracle客户端连接服务器,首先去找1521监听端口,服务器的1521监听端口再向server process进程发出请求,并返回一个随机端口,返回给客户端,客户端再来连接这个端口。

    这样就给服务器上的防火墙设置带来了麻烦,这个端口是随机的,如何开放? 

    windows 平台上的这个问题成了一大难题,很多论坛都有人问,但很少有人能解决。 unix平台不用担心,系统自动会解决这个问题.

    Matalink上提供了三种解决办法,实际上USE_SHARED_SOCKET 是最有效最方便的。

    但经过无数次实现,仍然没有成功,最后终于发现是Oracle 8.1.7bug

    需要打补丁,升级到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)"

    这样才真正实现只用一个端口,穿过防火墙。


    参考资料:

     

    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.  

    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

    Contributed by pvraju (p_v_raju73@rediffmail.com) on October 8, 2001.

    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  

    - FAQ Site

    http://www.orafaq.net/archive/comp.databases.oracl e.server/2002/04/13/143024.htm http://www.orafaq.net/archive/comp.databases.oracl e.server/2002/04/13/143024.htm http://www.pauck.de/marco/misc/oracle_and_firewall s.html


    第五部分、ORACLE网络
    [Q]如何限定特定IP访问数据库
    [A]可以利用登录触发器或者是修改sqlnet.ora(9i以上):
    增加如下内容:
    tcp.validnode_checking=yes
    #允许访问的ip
    tcp.inited_nodes=(ip1,ip2,……)
    #不允许访问的ip
    tcp.excluded_nodes=(ip1,ip2,……)

    [Q]如何穿过防火墙连接数据库
    [A]这个问题只会在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

    [Q]如何利用hostname方式连接数据库
    host name方式只支持tcp/ip协议的小局域网
    修改listener.ora中的如下信息
    (SID_DESC =
    (GLOBAL_DBNAME = ur_hostname) --你的机器名
    (ORACLE_HOME = E:\oracle\ora92) --oracle home
    (SID_NAME = orcl) --sid name
    )
    然后在客户端
    的sqlnet.ora中,确保有
    NAMES.DIRECTORY_PATH= (HOSTNAME)
    你就可以利用数据库服务器的名称访问数据库了

    第六部分、OS相关
    [Q]怎么样生成日期格式的文件
    [A]在LINUX/UNIX上,使用`date +%y%m%d` (`这个是键盘上~所在的那个键) 或$(date +%y%m%d),如:
    touch exp_table_name_`date +%y%m%d`.dmp
    DATE=$(date +%y%m%d)
    或者
    DATE=$(date +%Y%m%d --date '1 days ago') #获取昨天或多天前的日期
    Windows上,使用%date:~4,10%,其中4是开始字符,10是提取长度,表示从date生成的日期中,提取从4开始长度是10的串。你可以改成其它你需要的数字,如:
    Echo %date:~4,10%
    如果想得到更精确的时间,win上面还可以使用time

    [Q]测试磁盘与阵列性能
    [A]用类似如下的方法测试写能力
    time dd if=/dev/zero of=/oradata/biddb/testind/testfile.dbf bs=1024000 count=1000
    期间系统IO 使用可以用(unix):
    iostat -xnp 2 显示Busy程度

    [Q]怎么配置SSH密匙
    [A]可以防止"中间人"的进攻方式
    1、ssh-keygen 或ssh-keygen -d(ssh 2.x)生成钥匙
    2、然后拷贝公匙到你想登录的服务器,改名为authorized_keys,如果是3.0以下版本,需要改为authorized_keys2
    3、还可以利用config文件进一步简化操作

    Host *bj
    HostName 机器名或IP
    User 用户名
    有了这个配置文件,你就可以利用ssh bj来访问指定的机器了,也就可以利用scp与sftp来传送文件了。

    [Q]sqlplus怎么与shell结合
    [A]可以用如下的写法
    sqlplus /nolog << EOF
    connect user/pass
    spool test
    select * from tab;
    spool off
    exit
    EOF
    当然,RMAN也支持这样的写法。

    [Q]FTP怎么在脚本中自动上传/下载
    [A]可以把FTP写到shell脚本中,如
    ftp -n -i 主机IP <<EOF
    user username pass
    cd 目标目录
    put file
    get file
    #查询文件
    ls
    #退出
    bye
    EOF

  • 相关阅读:
    CSS3 实现六边形Div图片展示效果
    自己编写jQuery插件 之 放大镜
    自己编写jQuery插件 之 无缝滚动
    C#装箱拆箱
    C#基础知识
    数据库锁
    SQL2008中Merge的用法
    SQl去获取相同记录
    判断DataRow中是否包含某列
    Quartz中时间表达式的设置-----corn表达式
  • 原文地址:https://www.cnblogs.com/liangqihui/p/231685.html
Copyright © 2011-2022 走看看