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

 
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 地址的情况下)
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值