oracle服務端口方面會有很多的問題,下面就将為您介紹在防火牆上開放oracle服務端口的方法,希望對您學習oracle服務端口方面能有所幫助。
要使oracle用戶端能正常連接配接到設定有防火牆的安裝在windows上的oracle伺服器,單開放一個1521或自定義的監聽端口是不夠的。
我們有的時候需要映射端口遠端去通路oracle資料庫,這裡有個防火牆的問題,在unix上沒有問題,但是在win 平台上卻無法正确通路,下面的可以解決這個問題,:
近來由于工作需要,在windows xp平台上安裝了oracle9i資料庫作為測試之用,一切正常。但當客戶機連接配接伺服器時卻總是逾時,我首先想到了防火牆,當我打開1521端口時,連接配接操作仍然失敗。我又懷疑網絡有問題,用telnet server_ip:1521嘗試,連接配接被接受,說明1521端口已經被打開。
沒有辦法,查詢oracle資料後才明白,network listener隻起一個中介作用,當客戶連接配接它時,它根據配置尋找到相應的資料庫執行個體程序,然後spawned一個新的資料庫連接配接,這個連接配接端口由network listener傳遞給客戶機,此後客戶機就不再和打交道了,即使listener停止了工作。這個新的連接配接端口是不可預知的,因而會被防火牆阻止。
windows socket2 規範有一個新的特性,就是shared socket,所謂共享套接字是指一個程序共享另一個程序的套接字(詳見msdn相關參考)。如果讓network listener與資料庫服務程序共享套接字,那麼連接配接端口就不會變化。
如何設定shared socket?
在系統資料庫:hkey_local_machinesoftwareoraclehome0上建立一個字元串值:use_shared_socket=true。如果安裝了多個目錄,則每個類似的目錄都要設定:hkey_local_machinesoftwareoraclehomex (x目錄編号)
設定後要求重新啟動執行個體(隻重新開機listener發現沒有效果)
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)"
設定後要求重新啟動執行個體。