日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

orale的tnsping与TCP/IP的ping命令的比较

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 orale的tnsping与TCP/IP的ping命令的比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:http://www.builder.com.cn/2007/0915/507188.shtml

  比較orale的tnsping與TCP/IP的ping命令:

  -----------------------------------------------------------------------------
  Oracle Net 工具(命令)tnsping,是一個OSI會話層的工具,它用來:

  1)驗證名字解析(name resolution,當然是oracle自己的網絡服務名)

  2)遠程的listener是否啟動

  在驗證上面兩項功能方面,它是DBA手頭上一個比較得心應手的工具。Oracle 網絡接口支持不同的網絡與傳輸協議,其中我們最熟悉的就是TCP/IP.這篇文章只描述TCP/IP 協議族,然而,在oracle網絡接口支持的其它協議下,tnsping的功能是一樣的。

  Tnsping 可以用在多個網絡協議上,但是本文只討論TCP/IP網絡協議

  -----------------------------------------------------------------------------
  ORACLE TNSPING
  -----------------------------------------------------------------------------

  Oracle的tnsping測試程序,在通訊時使用TCP協議。TCP 是面向連接的OSI傳輸層協議。面向連接的協議在初始建立連接的階段需要進行初始的序列號的交換,這就是我們通常所指的三次握手。即tnsping測試程 序在與listener進行通訊時會產生三次握手現象。

  當在命令行中發出了tnsping命令后,會執行oracle 網絡別名(即網絡服務名,主機連接字符串)的解析工作。這個解析工作會在本地的tnsnames.ora文件或ORACLE的命令服務器或ORACLE LDAP(目錄服務)中進行。解析的目的是得到目標listener所在的機器名(IP地址)和listener偵聽的端口號。

  一旦得到listener的機器名與端口號,就可以打開一個到目標機器與端口的TCP連接。為了打開這個TCP連接,listener的機器名 必須被解析為ip地址(當然這只有在解析出的listener的連接地址為機器名時才這樣做),然后TCP/IP執行三次握手來完成這次連接。

  在連接建立之后,Tnsping工具然后就發送一個Oracle TNS 連接包給Oracle Listener,Listener然后就回應一個TNS 拒絕包(Refuse packet),在兩個機器間的TCP/IP連接就結束了。從oracle 網絡別名的解析到結束TCP/IP連接之間的總的耗費的時間就顯示在tnsping命令的輸出中。

  一個例子:

  C:>tnsping V817? 4

  TNS Ping Utility for 32-bit Windows:

  Version 8.1.7.0.0 - Production on 18-MAY-2001 14:27:57

  (c) Copyright 1997 Oracle Corporation.? All rights reserved.

  Attempting to contact

  ADDRESS=(PROTOCOL=TCP)(HOST=abadah.us.oracle.com)(PORT=1521))

  OK (1770 msec)

  OK (10 msec)

  OK (0 msec)

  OK (10 msec)

  上面這個例子顯示第一次tnsping需要1770毫秒,這些時間由在tnsnames.ora文件中解析V817網絡別名需要的時間、利用 DNS解析listener機器名“ abadah”需要的時間,三次TCP/IP握手需要的時間、TNS Connect 和Refuse packets傳輸需要的時間、斷開TCP/IP連接需要的時間。第二次tnsping只花費了10毫秒,這是因為所有的信息 (V817別名與IP地址)都已經在cache中了,然而Tnsping程序仍然做 TCP的連接與斷開操作。

  -----------------------------------------------------------------------------
  TCP/IP PING
  -----------------------------------------------------------------------------

  Transmission Control Protocol/Internet 協議族 (TCP/IP) 有一個稱為ping的工具。它是到TCP/IP 協議族中ICMP(Internet Control Message Protocol)協議的命令行接口。

  根據RFC 792:

  "有時候,一個網關或目的地址需要同源地址進行通訊,如:為了給源地址一個關于在處理數據報的過程中產生的錯誤。為了這種目的,就需要使用 ICMP協議。 ICMP需要網際協議(IP)的支持,這使它看起來就像一個更高層的協議,然而,ICMP實際上是IP的一個組成部分,在IP的每個模塊中必須實現它。

  Ping命令的作用之一就是收集不同大小的IP數據包在網絡上傳輸一個來回需要的時間。這可以用來估計網絡的大體性能和響應時間。

  Ping命令使用IP,而不是TCP,這樣就不需要TCP的3次握手機制,當運行ping命令時,它只發送與接收一個ip數據包,這比oracle的tnsping程序運行時需要更少的數據包。

  Ping的第一個的response time經常比平均response time要長,這是因為第一次一般需要對ping的機器名進行解析。這個解析可以通過本地的hosts文件、DNS服務器或其它方法實現。

  一個ping的例子:

  Pinging abadah.us.oracle.com [144.25.223.156] with 32 bytes of data:

  Reply from AAA.BBB.CCC.DDD: bytes=32 time<40ms TTL=255

  Reply from AAA.BBB.CCC.DDD: bytes=32 time<10ms TTL=255

  Reply from AAA.BBB.CCC.DDD: bytes=32 time<10ms TTL=255

  Reply from AAA.BBB.CCC.DDD: bytes=32 time<10ms TTL=255

  上面的例子顯示第一次的ping時間需要40毫秒,這包括DNS解析的時間。

  從上面的介紹我們可以得出:

  1.tnsping需要使用TCP,所以需要3次握手建立連接,而ping只使用IP,所以不需要3次握手,這也就解釋了為什么有的機器不能ping通,但是用tnsping確能測試通。

  2.Tnsping通,并不能說明客戶端能與數據庫建立連接。因為

  ping通只能說明客戶端能解析listener的機器名,而且lister也已經啟動,但是并不能說明數據庫已經打開,而且tsnping的過程與真正客戶端連接的過程也不一致。

  但是如果不能用tnsping通,則肯定連接不到數據庫。

  關于第2條可以用tns-12545錯誤來說明:

  TNS-12545 (ORA-12545): Connect failed because target host or object does not exist

  原因:

  客戶端不能正確解析服務器的機器名。該錯誤一般出現在客戶端沒有設置或沒有正確設置域名服務器的情況下出現。

  解決辦法:

  疑問:出現這種情況時,有時可以用tnsping 測程序測試網絡服務名可以通過,但還是不能用程序連接數據庫,你會感到很奇怪。有時即使將客戶端的tnsnames.ora中的服務器的機器名換為ip地址,還是會報錯,這會令人感到更加疑惑,會不會系統有問題?

  要真正解決這個問題,需要知道客戶端與服務器端在建立連接時所的數據流。并需要了解redirect session的概念。

  當一個客戶端連接在window上的數據庫,或以共享連接的模式連接在unix上的數據庫時(此時數據庫為MTS模式),客戶端的連接會發生重 定向現象,也就是listener在接受客戶端的連接后,會發送一個重定向的包給客戶端,然后客戶端利用這個重定向包中提供的信息(服務器的ip(或機器 名)和端口等信息)重新發起一個真正的到數據庫的連接。當將客戶端的tnsnames.ora中的服務器的機器名換為ip地址,客戶端的連接還是會報 ora- 12545錯的罪魁禍首就是這個重定向包中的內容。

  當客戶端連接window上的數據庫,或以共享連接的模式連接在unix上的數據庫時,因為tnsnames.ora中為服務器的ip地址,所 以不存在名字解析的問題,客戶端的連接請求會到達listener,這也就是tnsping 測試程序測試網絡服務名可以通過的原因,因為tnsping測試程序不會產生重定向問題。在listener接受客戶端的連接后,會跟據客戶請求的連接模 式(專用連接還是共享連接)和操作系統對socket的實現的情況,決定是否需要將客戶端的連接進行重定向,如果需要進行重定向,則會產生一個重定向包, 該包中包含的服務器的地址信息為從listener.ora文件中得到的listener偵聽的地址(根據listener.ora中的配置可能為服務器 的機器名,也可能為服務器的ip地址),該包中還包含客戶端應該重定向連接的端口信息(同listener偵聽的端口可能不為同一個),客戶端在收到這個 重定向包后,解析出應該重新連接的服務器地址(機器名或ip)和端口,重新利用解析出的信息建立一個新的連接,此時如果客戶端得到的為服務器的機器名并且 沒有配置域名解析,就會因為解析不出服務器的ip地址,從而導致產生ora-12545錯誤。

  所以,如果如果要徹底解決ora-12545錯誤,需要:

  1) 配置一個域名服務器,并正確的設置客戶端機器的域名服務器

  2) 將服務器的機器名與ip配置在客戶端的hosts文件中。

  3) 將客戶端tnsnames.ora和listener.ora中的地址部分都改為ip地址,而不是用機器名

  4) 將客戶端的連接改為專用連接,這樣會避免redirect 現象。(適用與客戶端tnsnames.ora中為服務器的ip地址的情況下)

總結

以上是生活随笔為你收集整理的orale的tnsping与TCP/IP的ping命令的比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。