首先,先弄清楚tnsping是什麼: Oracle Net 工具(命令)tnsping,是一個OSI會話層的工具,測試資料庫服務的命令,用來決定是否一個Oracle Net 網路服務(service)可以被接受。從某種意義上來說,tnsping 針對的 sqlnet連接,就好比為我們常用的ping ...
首先,先弄清楚tnsping是什麼:
Oracle Net 工具(命令)tnsping,是一個OSI會話層的工具,測試資料庫服務的命令,用來決定是否一個Oracle Net 網路服務(service)可以被接受。從某種意義上來說,tnsping 針對的 sqlnet連接,就好比為我們常用的ping 命令來檢查IP,主機名網路連接情況。tnsping常用來:①驗證名字解析(name resolution,是oracle自己的網路服務名)②遠程的listener是否啟動③檢查tcp協議是否已通,俗稱我們說的網路通不通。
然後,怎麼用?
命令格式為:tnsping IP地址:埠號/資料庫服務名。或者 tnsping 網路服務名。
在Windows 客戶端, 開始 菜單=》 運行 =》 輸入 cmd 命令,進入dos視窗,並輸入tnsping bxsim
上面返回的 “Attempting to contact” 後面部分是sqlnet 如何解析到的bxsim 別名,或者叫 連接標識符。該別名的解析是通過客戶端的 TNS_ADMIN指定路徑下的 sqlnet.ora文件中的NAMES.DIRECTORY_PATH 參數決定的。上面的試驗結果顯示的是通過 TNSNAMES 適配器 來解析成功的。
該請求可以看到,是通過 TCP 的網路協議 (PROTOCOL = TCP), 連接到了 IP地址為127.0.0.1(本機IP)上的伺服器(也可以是主機名),希望連接的埠為 1521,服務名為 (SERVICE_NAME = orcl)。
連接時間毫秒的意思是 一個預估的大概網路傳輸往返一次的時間(這裡為0ms)。
其實,不論資料庫是否運行,只要監聽存在併在運行,tnsping 都可以成功解析! tnsping 即使在資料庫實例停止的情況下,並沒有監聽1521埠,只要監聽運行,tnsping就可以返回正常!監聽停止之後,tnsping 無法被遠端監聽接受。
總結:
tnsping 用於診斷各種客戶端連接問題還是一個非常好的工具。但是我們要清楚的知道,這個工具能做什麼(檢查客戶端TNS配置),什麼不能做(檢查數據庫實例是否啟動,監聽埠是否在1521上)!tnsping的解析成功僅僅意味著本地的tnsnames.ora ,IP地址等配置成功,但是,完全跟目標資料庫實例連接沒有任何關係!最後,sqlnet 跟資料庫也完全是獨立的兩個問題。不要因為sqlnet連接方面出錯,就肯定是數據庫的問題。要從客戶端自身先找原因。
推薦閱讀:
https://blogs.oracle.com/database4cn/tnsping