對於tnsping的連線超時的功能補充

2021-09-22 19:25:03 字數 2423 閱讀 1347

tnsping,作為oracle連線測試的乙個小巧的工具,其實大家已經不陌生了,但是使用tnsping有乙個問題,就是連線超時,當然這個和網路的安全策略等密不可分,但是擺在我面前的乙個問題是,現在有大量的伺服器,每台資料庫伺服器上都有tnsnames.ora,如果需要判斷tnsnames.ora裡面的配置是否生效,使用tnsping是乙個很自然的選擇。

我也這麼做了,我寫了乙個命令去解析tnsnames.ora 然後把裡面的連線物件給標示出來。

cat tnsnames.ora|awk ''|grep  -iv 'address\|address_list\|connect_data\|service_name\|sid\|server\|)'|sed 's/=(description//g'|grep -v 'description\|#'|awk -f= ''|sed '/^$/d' |grep -v \(

命令的輸出結果類似:

db133_95

csvip

testdb

我在這個基礎上就可以使用tnsping來判斷了。

但是剛開始我就發現這麼做還是有乙個隱患,那就是不可避免的連線超時問題。我們可以簡單測試一下,看看預設的超時時長是多少?

$ time tnsping db84

tns ping utility for linux: version 11.2.0.3.0 - production on 18-may-2016 22:17:53

used parameter files:

used tnsnames adapter to resolve the alias

attempting to contact (description = (address = (protocol = tcp)(host = 10.11.17.84)(port = 1528)) (connect_data = (service_name = sol)))

tns-12535: tns:operation timed out

real    1m0.011s

user    0m0.006s

sys     0m0.004s

通過time可以馬上定位出超時時長是1分鐘。

那麼對於很多執行已久,業務依賴性較高的系統,tnsnames.ora裡面的連線物件就非常多了,這個時候如果使用tnsping的方式那就很容易超時,假設裡面有100個連線物件,如果存在30個無效連線物件,那就需要30分鐘,如果有多台伺服器,那就不用幹其他的活了。

對於tnsping,這個命令也沒有提供更多的使用選項,所以目前來看還無法指定超時時長。

$ tnsping --help

tns ping utility for linux: version 11.2.0.3.0 - production on 18-may-2016 18:03:15

used parameter files:

tns-03505: failed to resolve name

$ tnsping -h

tns ping utility for linux: version 11.2.0.3.0 - production on 18-may-2016 18:03:19

used parameter files:

tns-03505: failed to resolve name

這個還是依賴於系統級,那麼我們把tnsping先放一放。看看還有沒有其它的實現方式,乙個很自然的實現方式就是telnet

一般測試連通性,我們可以使用telnet 伺服器ip  埠的方式。下面是乙個測試成功的案例。

$ telnet 10.11.65.111 1528

trying 10.11.65.111...

connected to 10.11.65.111.

escape character is '^]'.

connection closed by foreign host.

對於連通性問題的場景,telnet貌似也沒有相應的超時選項。

所以使用telnet的方式和tnsping的效果差不多。

那麼還有什麼方式呢,這個時候我們可以好好想想還有那些系統級的工具可以滿足要求,netcat就是乙個不錯的選擇。

所以想到了,我二話沒說,就開始了測試。nc的乙個亮點就是可以指定超時時長,比如我們設定為5秒,超時就顯示連線失敗

$ echo quit  | nc -w 5  -v 10.11.65.111 1521

connection to 10.11.65.111 1521 port [tcp/ncube-lm] succeeded!

$ echo quit  | nc -w 5  -v 10.11.65.116 1521

nc: connect to 10.11.65.116 port 1521 (tcp) failed: no route to host

看來有了相應的解決思路,tnsping連線超時的問題就可以變通解決了。

CXF 連線超時與請求超時的設定

主要在客戶端呼叫時設定 在編譯 執行是沒問題的,但測試發現如果服務端沒有啟動或網路環境差,cxf會預設等待一定的時間 則有了客戶端呼叫超時的設定 方式 1 在 中設定超時 這是命令生成的類,該類的例項可當成工廠來使用 cxfetcvremindinfoserviceimpl factory new ...

SSH連線Linux的Server超時

etc ssh sshd config 找到 clientaliveinterval 數值是秒,比如你設定為300,就是5分鐘.clientaliveinterval 300 clientalivecountmax 指如果發現客戶端沒有相應,則判斷一次超時,這個引數設定允許超時的次數。比如5 cli...

處理http連線超時的方法

宣告乙個boolean公共變數,表明當前httpconnection是否得到伺服器回應。你的連線線程中在連線之前置這個變數為false 另起乙個監視執行緒,拿到那個httpconnection的連線物件,並迴圈監視這個boolean公共變數。如果指定時間內 20秒後 你的boolean公共變數還是f...