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)"

 

設置後要求重新開機實例。
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()