首页 > 代码库 > 记一次离奇的TNS-12545 TNS-12560 TNS-00515

记一次离奇的TNS-12545 TNS-12560 TNS-00515

      最近reportDB监听无法随系统自启动,现象比较怪异。因为该服务器上的另一个实例的监听可以正常启动,这个不能自启动实例的监听手动启动又是正常的。因此记下这次离奇暂未找到原因的故障。

 

1、故障现象

Starting CRON daemondoneOracle 10g auto start/stopStartup "USMTHLY" listener.LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 08-JUL-2014 17:05:49Copyright (c) 1991, 2006, Oracle.  All rights reserved.Starting /users/oracle/OraHome10g/bin/tnslsnr: please wait...TNSLSNR for Linux: Version 10.2.0.3.0 - ProductionSystem parameter file is /users/oracle/OraHome10g/network/admin/listener.oraLog messages written to /users/oracle/OraHome10g/network/log/listener_usmthly.logError listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.101.1.106)(PORT=1520)))TNS-12545: Connect failed because target host or object does not exist TNS-12560: TNS:protocol adapter error  TNS-00515: Connect failed because target host or object does not exist   Linux Error: 99: Cannot assign requested address#上面的错误信息了来自系统启动日志,同样出现在该实例的监听器日志里。   #故障环境oracle@sysreportDB:/users/oracle> cat /etc/issueWelcome to SUSE Linux Enterprise Server 10 SP4  (x86_64) - Kernel \r (\l).oracle@sysreportDB:/users/oracle> sqlplus -vSQL*Plus: Release 10.2.0.3.0 - Production#服务器启动后,检查数据库实例,2个实例都已成功启动oracle@sysreportDB:~> ps -ef | grep pmon | grep -v greporacle    4916     1  0 Jul08 ?        00:00:00 ora_pmon_USMTHLYoracle    5605     1  0 Jul08 ?        00:00:00 ora_pmon_USBO2oracle@sysreportDB:~> ps -ef | grep lsnr| grep -v grep      #仅仅只有usbo2的监听被启动oracle    5597     1  0 Jul09 ?        00:00:00 /users/oracle/OraHome10g/bin/tnslsnr listener_USBO2 -inherit

2、故障分析

oracle@sysreportDB:~> oerr tns 1254512545, 00000, "Connect failed because target host or object does not exist"// *Cause: The address specified is not valid, or the program being // connected to does not exist.// *Action: Ensure the ADDRESS parameters have been entered correctly; the// most likely incorrect parameter is the node name.  Ensure that the // executable for the server exists (perhaps "oracle" is missing.)// If the protocol is TCP/IP, edit the TNSNAMES.ORA file to change the// host name to a numeric IP address and try again.oracle@sysreportDB:~> oerr tns 1256012560, 00000, "TNS:protocol adapter error"// *Cause: A generic protocol adapter error occurred.// *Action: Check addresses used for proper protocol specification. Before// reporting this error, look at the error stack and check for lower level// transport errors. For further details, turn on tracing and reexecute the// operation. Turn off tracing when the operation is complete.oracle@sysreportDB:~> oerr tns 0051500515, 00000, "Connect failed because target host or object does not exist"// *Cause: The address specified is not valid, or the program being // connected to does not exist.// *Action: Ensure the ADDRESS parameters have been entered correctly; the// most likely incorrect parameter is the node name.  Ensure that the // executable for the server exists (perhaps "oracle" is missing.)#上面的三个错误号描述信息表明该故障与主机名或IP地址有关,需要检查是否为有效的IP或主机名#下面查看监听器及TNSNAMES的配置oracle@sysreportDB:/users/oracle/OraHome10g/network/admin> more listener.oraSID_LIST_LISTENER_USMTHLY =   (SID_LIST =    (SID_DESC =        (sid_name=USMTHLY)        (oracle_home = /users/oracle/OraHome10g)    )  )LISTENER_USMTHLY =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS_LIST =        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.101.1.106)(PORT = 1520))      )    )  )SID_LIST_LISTENER_USBO2 =   (SID_LIST =    (SID_DESC =        (sid_name=USBO2)        (oracle_home = /users/oracle/OraHome10g)    )  )LISTENER_USBO2 =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS_LIST =        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.101.1.106)(PORT = 1504))      )    )  )oracle@sysreportDB:/users/oracle/OraHome10g/network/admin> more tnsnames.oraUSMTHLY=  (DESCRIPTION=    (ADDRESS=      (PROTOCOL=TCP)      (HOST=10.101.1.106)      (PORT=1520)    )    (CONNECT_DATA=      http://www.mamicode.com/(SERVICE_NAME=USMTHLY)>

3、故障解决

#对于上面的问题实在是百思不得其解,就差使用sqlnet trace。#下面尝试将监听器配置文件内IP地址使用主机名来代替,竟然成功鸟。#如下2种方式都可以将监听随系统启动而启动,一个是主机名,一个是full主机名#LISTENER_USMTHLY =#  (DESCRIPTION_LIST =#    (DESCRIPTION =#      (ADDRESS_LIST =#        (ADDRESS = (PROTOCOL = TCP)(HOST = sysreportDB)(PORT = 1520))#      )#    )#  )LISTENER_USMTHLY =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS_LIST =        (ADDRESS = (PROTOCOL = TCP)(HOST = sysreportDB.2goasp.com)(PORT = 1520))      )    )  )#高兴之余,查看系统日志,汗,还是有错误,这次的错误是TNS-12543,目标主机不可达。 #怀疑是否hosts文件中是否存在异常字符,于是尝试重建Hosts文件,重建后错误消息依旧如下。Starting CRON daemondoneOracle 10g auto start/stopStarting Oracle10g: Startup "USMTHLY" listener.LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 09-JUL-2014 17:15:47Copyright (c) 1991, 2006, Oracle.  All rights reserved.Starting /users/oracle/OraHome10g/bin/tnslsnr: please wait...TNSLSNR for Linux: Version 10.2.0.3.0 - ProductionSystem parameter file is /users/oracle/OraHome10g/network/admin/listener.oraLog messages written to /users/oracle/OraHome10g/network/log/listener_usmthly.logListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sysreportDB.2goasp.com)(PORT=1520)))Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sysreportDB)(PORT=1520)))TNS-12543: TNS:destination host unreachable TNS-12560: TNS:protocol adapter error  TNS-00513: Destination host unreachable   Linux Error: 101: Network is unreachable#最终,此题暂时无解,没有找到原因,不影响自启动而已。


4、小结
a、对于TNS-12545,TNS-00515应首先考虑是否使用了合适的IP,主机名,应检查服务器host文件,网络配置等
b、Step a检查完后应考虑是否正确的配置了监听以及tnsnames
c、对于上述该类错误,应同时检查及分析监听器日志   
d、对于客户端出现TNS-12545,TNS-00515等,考虑客户端能否将主机转换成对应的IP(客户端tnsnames.ora使用主机名的情形时)
e、有关Oracle网络配置相关可以参考:
http://blog.csdn.net/leshami/article/category/828434