在防火牆上開發Oracle埠的問題
需要和Oracle資料庫做DBLink,嘗試連到伺服器時怎麼也連不通,檢查了網路、檢查了埠1521,都沒有問題,可是就是連不通。整理解決方法 如下:
Oracle接收外部連線的機制比較特別,Oracle客戶端連線伺服器,首先去找1521監聽埠,伺服器的1521監聽埠再向server process程式發出請求,並返回一個隨機埠,返回給客戶端,客戶端再來連線這個埠。
[@more@]所以實際上Oracle的對外埠是不固定的,於是在Windows平臺上的這個問題成了一大難題(Unix平臺系統會自動解決這個問題)。對於這個棘手的問題,除了關閉防火牆外當然還有其他好辦法。
Windows Socket2 規範有一個新的特性,就是Shared Socket, 所謂共享套接字是指一個程式共享另一個程式的套接字。如果讓network listener與資料庫服務程式共享套接字,那麼連線埠就不會變化。設定也很簡單在登錄檔:HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0上新建一個字串值:USE_SHARED_SOCKET=true。如果安裝了多個目錄,則每個類似的目錄都要設定:HKEY_LOCAL_MACHINESOFTWAREORACLEHOMEx (x目錄編號)。設定後要求重新啟動例項即可。
==================================================================================
第二份資料 如下 (轉載)
==================================================================================
在防火牆上開放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)"
這樣才真正實現只用一個埠,穿過防火牆。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/262387/viewspace-1041926/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Windows上Oracle開放防火牆埠問題(轉)WindowsOracle防火牆
- ORA-12170 Windows上Oracle開放防火牆埠問題WindowsOracle防火牆
- linux在防火牆上開啟1521埠Linux防火牆
- ORA-12170:TNS:連線超時-Windows上Oracle開放防火牆埠問題WindowsOracle防火牆
- 防火牆埠(上)(轉載)防火牆
- Windows server 防火牆開放oracle監聽埠WindowsServer防火牆Oracle
- linux 防火牆埠號開發情況Linux防火牆
- CentOS 7 開放防火牆埠CentOS防火牆
- centos 開啟防火牆指定埠CentOS防火牆
- CentOS下開放防火牆埠CentOS防火牆
- 防火牆在RAC上的配置防火牆
- Centos7 防火牆(firewall)開埠CentOS防火牆
- pfSense——跑在 Vmware 上的防火牆防火牆
- 開啟、關閉防火牆或者開放埠防火牆
- CentOS開啟防火牆及開放指定埠CentOS防火牆
- Centos 7防火牆firewalld開放80埠CentOS防火牆
- Linux 防火牆開放特定埠 (iptables)Linux防火牆
- 轉載: 總結:oracle穿過防火牆的問題Oracle防火牆
- 在Ubuntu上配置SSH訪問並關閉防火牆Ubuntu防火牆
- 軟體防火牆引起的問題防火牆
- 防火牆設定的小問題防火牆
- ORACLE RAC開啟防火牆Oracle防火牆
- 防火牆埠(下)(轉載)防火牆
- 防火牆埠(中)(轉載)防火牆
- Centos7 開啟80埠防火牆命令CentOS防火牆
- Mac有防火牆嗎?關於Mac防火牆常見的問題解答Mac防火牆
- centsos關閉防火牆解決websocket伺服器連線不上的問題(ifconfig、防火牆、ping、ws啟動時,只用埠即可 )防火牆Web伺服器
- Ubuntu系統中防火牆的使用和開放埠Ubuntu防火牆
- Windows 上使用 PowerShell 設定防火牆規則和埠轉發; Windows 上配置埠轉發,將 3389 埠的流量重定向到自定義埠;Windows防火牆
- Linux 7新增防火牆埠Linux防火牆
- 伺服器由於防火牆問題導致埠不通解決方法伺服器防火牆
- ubuntu下開啟/關閉防火牆 及埠 - 命令Ubuntu防火牆
- linux下修改防火牆,開啟8080埠Linux防火牆
- 雲伺服器埠和防火牆埠配置伺服器防火牆
- Linux 防火牆只允許指定IP 埠訪問Linux防火牆
- Linux下防火牆開啟相關埠及檢視已開啟埠Linux防火牆
- 伺服器window如何設定防火牆開放埠伺服器防火牆
- 分享:有關Linux伺服器(在防火牆iptables)開放埠的操作總結Linux伺服器防火牆