现在的位置: 首页 > 综合 > 正文

orale的TNSPING和tcp/ip的PING命令的联系和区别

2013年10月14日 ⁄ 综合 ⁄ 共 4281字 ⁄ 字号 评论关闭
 

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
  -----------------------------------------------------------------------------
  Oracletnsping测试程序,在通讯时使用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 ListenerListener然后就回一个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 142757
  (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这样就不需要TCP3次握手机制,当运行ping命令,它只送与接收一个ip数据包,oracletnsping程序运行需要更少的数据包。
  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.oralistener.ora中的地址部分都改ip地址,而不是用机器名
 4) 将客端的接改为专接,这样会避免redirect 象。(适用与客tnsnames.ora器的ip地址的情况下)

 

抱歉!评论已关闭.