Tnsping是Oracle提供的诊断连接动作的重要方法。我们在客户端上使用tnsping,可以快速的定位连接过程中错误,进行问题判断。从功能上看,tnsping能够帮助我们解决几个方面问题:
本地Oracle Net配置文件解析:sqlnet.ora、tnsname.ora是我们客户端最重要的两个配置文件。由于历史的原因,Oracle基础配置文件很多是文本格式,Oracle Net三个核心配置文件尤其如此。netca等配置工具也只是一个文本文件写入读取功能。很多朋友进行配置的时候,图简单直接进行文本复制黏贴,容易引起问题故障。tnsping可以模拟连接过程,对配置文件中的名称进行预解析,如果存在格式错误,解析必定失败;
服务器端监听器状态诊断:在远程连接数据库服务器的时候,监听器是一个不能回避的组件。tnsping是可以进行网络访问判断的,如果监听器没有运行、或者没有在指定的端口上运行,tnsping是可以做出判断提示信息的;
注册服务有限验证:在本地连接名称中,服务名、主机名、监听器伺候端口、连接协议是连接信息的几个要素。服务名是tnsping不能验证的对象,也就是说。如果监听器注册信息(动态注册、静态注册)中不存在连接的服务名,tnsping是不会报错的;
使用方法如下
tnsping ip:port/service_name
tnsping命令:如果能够ping通,则说明客户端能解析listener的机器名,而且lister也已经启动,但是并不能说明数据库已经打开,而且tsnping的过程与真正客户端连接的过程也不一致。但是如果不能用tnsping通,则肯定连接不到数据库。
默认情况下,tnsping跟踪功能是关闭的。我们需要在Oracle Net配置文件sqlnet.ora中进行手工的配置。注意:配置是在客户端,我们执行tnsping命令也是在客户端进行。$ORACLE_HOME/network/admin
--客户端sqlnet.ora,位置$ORACLE_HOME/network/admin
使用tnsping连接一个本地连接名oracle
然后在$ORACLE_HOME/network/trace/tnsping.trc中查看跟踪信息
实验:
在主机database2上面将关闭监听
[oracle@Database2 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 24-MAY-2018 06:13:19
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
在主机database1上面去实验tnsping命令
[oracle@Database1 trace]$ tnsping 192.168.57.129:1521/oradba
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 24-MAY-2018 14:37:31
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used HOSTNAME adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=oradba))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.57.129)(PORT=1521)))
TNS-12541: TNS:no listener
现在在主机database2上面将监听打开
[oracle@Database2 ~]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 24-MAY-2018 06:15:47
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Starting /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/Database2/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Database2)(PORT=1521)))
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 24-MAY-2018 06:15:47
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/Database2/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Database2)(PORT=1521)))
Services Summary...
Service "oradba" has 1 instance(s).
Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
这个时候数据库是关闭的。
在database1上面使用tnsping
[oracle@Database1 trace]$ tnsping 192.168.57.129:1521/oradba
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 24-MAY-2018 14:41:08
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used HOSTNAME adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=oradba))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.57.129)(PORT=1521)))
OK (0 msec)
注意:如果ip地址写错会出现TNS-12543: TNS:destination host unreachable
端口写错TNS-12541: TNS:no listener
服务名写错没关系,不会出现错误提示,因为不检测服务名
总结:
1. tnsping 命令可以检查tcp协议是否已同,俗称我们说的网络通不通
2.tnsping命令监听服务器上的监听是否已开启
3.tnsping命令不检测服务器上的监听的服务名,所以tnsping通,不代表就能连通。
4.验证名字解析,检查tnsnames.ora里面的内容是否正确