ORACLE如何穿越防火牆

應用程序如果要穿越防火牆,一般來說只需要將相應的端口在防火牆上開通,或者將服務器的IP映射到防火牆的外口即可。但是ORACLE的端口有點特殊,程序訪問ORACLE的端口是1521(默認),但是這個端口只是ORACLE的偵聽器用(network listener),listener 只起一箇中介作用,當客戶連接它時,它根據配置尋找到相應的數據庫實例進程,然後spawned一個新的數據庫連接,這個連接端口由network listener傳遞給客戶機,此後客戶機就不再和打交道了,即使listener停止了工作。這個新的連接端口是隨機的,不一定是1521或其它指定端口,因而會被防火牆阻止。
  根據網上搜索資料,大致有三種方法:
  方法一:
  在windows2000的註冊表中,hkey_local_machinesoftwareoraclehome0下加入字符串值:USE_SHARED_SOCKET=TRUE,即可。  
  方法二:
  1、首先將數據庫實例改爲SHARED 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端口。  
  方法三:
  在數據庫端(也可以是另外的機器,但是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)
  
  根據自己的實施操作,方法一好象對9I及10G無用,可能是對8I有用,沒試過;
  方法二在9I和10G上是可行的,一直都用這種方法;
  方法三在9I和10G上是不行的,沒有做成功過;
  如果是Linux下的Oracle,只要在防火牆中打開TCP 1521端口就可以連接了。
發佈了26 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章