如何配置MTS以穿越防火牆連線oracle

hanson發表於2018-12-06

事情的起因是物流部的應用程式需要通過internet連線位於市區的資料庫伺服器,而該應用程式是個C/S應用。同時在市區的辦公室配置了防火牆,並且只開放了1521埠。這種情況下,就變成tnsping能通,但是用sqlplus連就不能連通。

這種情況下,對於dedicated連線方式就不適用了。因為dedicated連線方式是listener在1521埠監聽連線請求,一旦監聽到連線請求,則分配一個埠號,並將該埠號傳送給客戶端,從而客戶端再次連線到該埠上,從而連進oracle伺服器。

網路上google了一下,發現有不少方法都說到如何穿越防火牆。


比如修改登錄檔,但是oracle需要打補丁,升級到Oracle 8.1.7.1.2。不同版本,登錄檔位置不一樣
- 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

很不幸,我的資料庫是Oracle 8.1.7.0.0,暫時也不想升級。

還有一種方法是在資料庫端(也可以是另外的機器,但是cman的機器必須和資料庫都在防火牆的後面)安裝了cman的前提下,啟動cman,然後開放防火牆端的1630埠(看cman開的是什麼埠啦),最後在客戶端的tnsnames.ora檔案中新增:
cmantest = (description = (address_list = (address =

CMAN從沒有過,準備有空再研究一下。

第三種方法就是將考慮配置MTS了。因為對於MTS,則可以只用一個埠1521來處理客戶端的請求,不會再傳送埠號給客戶端,而是直接把客戶端的請求傳遞給某個可用的dispatcher。

現在,問題就轉換為配置MTS了。

MTS配置其實不復雜,步驟如下:

1、配置幾個init引數。如下:

mts_dispatchers = "(address=(protocol=TCP)(host=ypsyb-srv)(port=1521))(dispatchers=10)"
mts_max_dispatchers = 15
mts_servers = 50
mts_max_servers = 80
mts_service = webdb
mts_listener_address="(address=(protocol=TCP)(host=ypsyb-srv)(port=1521))"
large_pool_size=200000000

其中,比較重要的是mts_dispatchers ,必須加上(port=1521),否則dispatcher會在隨機埠上監聽,而不是1521埠。

儲存以後,啟動資料庫。

2、配置監聽

有資料說配置監聽時應刪除所有SID_LIST,實際測試下來,這是錯誤的說法。MTS下的listener.ora檔案的內容與dedicated下的listener.ora的內容是一樣的。

啟動監聽器。

3、配置客戶端

有資料說在配置客戶端時,在tnsnames.ora中的host一定要寫資料庫server的名字,而且還需要配置host以進行域名解析。這也是錯誤的。實際測試下來,MTS下的tnsnames.ora的內容與dedicated下的tnsnames.ora的內容一樣。

4、使用sql/plus連線,一切ok。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9842/viewspace-156313/,如需轉載,請註明出處,否則將追究法律責任。

相關文章