Oracle客戶端穿過防火牆連接服務器

 

Oracle客戶端穿過防火牆連接服務器<?XML:NAMESPACE PREFIX = O />

 

Oracle客戶端連接服務器,首先去找1521監聽端口,服務器的1521監聽端口再向server process進程發出請求,並返回一個隨機端口,返回給客戶端,客戶端再來連接這個端口。

這樣就給服務器上的防火牆設置帶來了麻煩,這個端口是隨機的,如何開放?

 

windows 平臺上的這個問題成了一大難題,很多論壇都有人問,但很少有人能解決。 unix平臺不用擔心,系統自動會解決這個問題.

Matalink上提供了三種解決辦法,實際上USE_SHARED_SOCKET 是最有效最方便的。

但經過無數次實現,仍然沒有成功,最後終於發現是Oracle <?XML:NAMESPACE PREFIX = ST1 />8.1.7bug

需要打補丁,升級到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)"

這樣才真正實現只用一個端口,穿過防火牆。




參考資料:

 

Oracle uses dynamic ports under windows NT because of a bug in windows, so oracle can't use shared sockets. This bug got fixed with service pack 3 I think. By default, oracle uses the dynamic ports without caring which service pack is installed. There is a registry setting to force oracle to use shared sockets. The parameter is (what a surprise!) USE_SHARED_SOCKET in LOCAL_MACHINE/Software/Oracle/HomeX where X is your desired homedir. This parameter should be set to TRUE. There's a whitepaper from oracle for this too, somewhere on their site. Anyway, this parameter doesnt work for 8.1.7 Some users reported that it worked with 8.1.6.3, but 8.1.7 termiates every conection immediately...

 

Contributed by Arne Brutschy ([email protected]) on July 5, 2001.

 

Actually, I want to establish a replication system in my local machine.. for replicating objects(tables) from remote database to a local database... what data security option i must take in to account. I request you to give me the detail description like which protocal must be used and what parameter must be set in init.ora file,sqlnet.ora and listener.ora file and what other steps to be taken... I would be very thankful to you ... if you kindly describe the things...actually i want to maintain the data privacy which happens between remote and local database while replication take place.. any one can trap the net and extract the data ... so i need to stop that. 

 

I would be very thankful to you ... this is a request.. please mail me on the address [email protected]

 

regards p.v.raju

Contributed by pvraju ([email protected]) on October 8, 2001.

Modify Windows registry. 

 

USE_SHARED_SOCKET = TRUE 

 

- 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 

 

- FAQ Site

http://www.orafaq.net/archive/comp.databases.oracl e.server/2002/04/13/143024.htm http://www.orafaq.net/archive/comp.databases.oracl e.server/2002/04/13/143024.htm http://www.pauck.de/marco/misc/oracle_and_firewall s.html


第五部分、ORACLE網絡
[Q]如何限定特定IP訪問數據庫
[A]可以利用登錄觸發器或者是修改sqlnet.ora(9i以上):
增加如下內容:
tcp.validnode_checking=yes
#允許訪問的ip
tcp.inited_nodes=(ip1,ip2,……)
#不允許訪問的ip
tcp.excluded_nodes=(ip1,ip2,……)

[Q]如何穿過防火牆連接數據庫
[A]這個問題只會在WIN平臺出現,UNIX平臺會自動解決。
解決方法:
在服務器端的SQLNET.ORA應類似
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
TRACE_LEVEL_CLIENT = 16
註冊表的HOME0加[HKEY_LOCAL_MACHINE]
USE_SHARED_SOCKET=TRUE

[Q]如何利用hostname方式連接數據庫
host name方式只支持tcp/ip協議的小局域網
修改listener.ora中的如下信息
(SID_DESC =
(GLOBAL_DBNAME = ur_hostname) --你的機器名
(ORACLE_HOME = E:/oracle/ora92) --oracle home
(SID_NAME = orcl) --sid name
)
然後在客戶端
的sqlnet.ora中,確保有
NAMES.DIRECTORY_PATH= (HOSTNAME)
你就可以利用數據庫服務器的名稱訪問數據庫了

第六部分、OS相關
[Q]怎麼樣生成日期格式的文件
[A]在LINUX/UNIX上,使用`date +%y%m%d` (`這個是鍵盤上~所在的那個鍵) 或$(date +%y%m%d),如:
touch exp_table_name_`date +%y%m%d`.dmp
DATE=$(date +%y%m%d)
或者
DATE=$(date +%Y%m%d --date '1 days ago') #獲取昨天或多天前的日期
Windows上,使用%date:~4,10%,其中4是開始字符,10是提取長度,表示從date生成的日期中,提取從4開始長度是10的串。你可以改成其它你需要的數字,如:
Echo %date:~4,10%
如果想得到更精確的時間,win上面還可以使用time

[Q]測試磁盤與陣列性能
[A]用類似如下的方法測試寫能力
time dd if=/dev/zero of=/oradata/biddb/testind/testfile.dbf bs=1024000 count=1000
期間系統IO 使用可以用(unix):
iostat -xnp 2 顯示Busy程度

[Q]怎麼配置SSH密匙
[A]可以防止"中間人"的進攻方式
1、ssh-keygen 或ssh-keygen -d(ssh 2.x)生成鑰匙
2、然後拷貝公匙到你想登錄的服務器,改名爲authorized_keys,如果是3.0以下版本,需要改爲authorized_keys2
3、還可以利用config文件進一步簡化操作

Host *bj
HostName 機器名或IP
User 用戶名
有了這個配置文件,你就可以利用ssh bj來訪問指定的機器了,也就可以利用scp與sftp來傳送文件了。

[Q]sqlplus怎麼與shell結合
[A]可以用如下的寫法
sqlplus /nolog << EOF
connect user/pass
spool test
select * from tab;
spool off
exit
EOF
當然,RMAN也支持這樣的寫法。

[Q]FTP怎麼在腳本中自動上傳/下載
[A]可以把FTP寫到shell腳本中,如
ftp -n -i 主機IP <<EOF
user username pass
cd 目標目錄
put file
get file
#查詢文件
ls
#退出
bye
EOF

發佈了26 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章