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

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

1、故障现象

Starting CRON daemondone
Oracle 10g auto start/stop
Startup "USMTHLY" listener.

LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 08-JUL-2014 17:05:49

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

Starting /users/oracle/OraHome10g/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.3.0 - Production
System parameter file is /users/oracle/OraHome10g/network/admin/listener.ora
Log messages written to /users/oracle/OraHome10g/network/log/listener_usmthly.log
Error 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

#上面的错误信息了来自系统启动日志,同样出现在该实例的监听器日志里。   

#故障环境
[email protected]:/users/oracle> cat /etc/issue

Welcome to SUSE Linux Enterprise Server 10 SP4  (x86_64) - Kernel \r (\l).

[email protected]:/users/oracle> sqlplus -v

SQL*Plus: Release 10.2.0.3.0 - Production

#服务器启动后,检查数据库实例,2个实例都已成功启动
[email protected]:~> ps -ef | grep pmon | grep -v grep
oracle    4916     1  0 Jul08 ?        00:00:00 ora_pmon_USMTHLY
oracle    5605     1  0 Jul08 ?        00:00:00 ora_pmon_USBO2

[email protected]:~> 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、故障分析

[email protected]:~> oerr tns 12545
12545, 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.
[email protected]:~> oerr tns 12560
12560, 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.
[email protected]:~> oerr tns 00515
00515, 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的配置
[email protected]:/users/oracle/OraHome10g/network/admin> more listener.ora
SID_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))
      )
    )
  )

[email protected]:/users/oracle/OraHome10g/network/admin> more tnsnames.ora
USMTHLY=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=10.101.1.106)
      (PORT=1520)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=USMTHLY)
    )
  )

USBO2=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=10.101.1.106)
      (PORT=1504)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=USBO2)
    )
  )
#从上面的配置来看,配置无异常。
#下面查看本机host及IP信息,从下面的描述来看,主机host配置无异常
[email protected]:~> more /etc/hosts
127.0.0.1       localhost

# special IPv6 addresses
::1             localhost ipv6-localhost ipv6-loopback

fe00::0         ipv6-localnet
ff00::0         ipv6-mcastprefix
ff02::1         ipv6-allnodes
ff02::2         ipv6-allrouters
ff02::3         ipv6-allhosts
10.101.1.106    sysreportDB.2goasp.com sysreportDB  

[email protected]:~> hostname
sysreportDB
# Author : Leshami
# Blog   : http://blog.csdn.net/leshami

#下面是其IP信息
[email protected]:/var/log> ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:70:82:63
          inet addr:10.101.1.106  Bcast:10.201.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5763651 errors:0 dropped:0 overruns:0 frame:0
          TX packets:802254 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:8102327746 (7726.9 Mb)  TX bytes:88597013 (84.4 Mb)

lo        Link encap:Local Loopback      #有环路能正常TX,RX
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:92972 errors:0 dropped:0 overruns:0 frame:0
          TX packets:92972 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4993723 (4.7 Mb)  TX bytes:4993723 (4.7 Mb)

#尝试手动启动监听,手动启动监听无异常
[email protected]:/var/log> lsnrctl start listener_USMTHLY

LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 08-JUL-2014 17:10:49

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

Starting /users/oracle/OraHome10g/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.3.0 - Production
System parameter file is /users/oracle/OraHome10g/network/admin/listener.ora
Log messages written to /users/oracle/OraHome10g/network/log/listener_usmthly.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sysreportDB.2goasp.com)(PORT=1520)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sysreportDB.2goasp.com)(PORT=1520)))
STATUS of the LISTENER
------------------------
Alias                     listener_USMTHLY
Version                   TNSLSNR for Linux: Version 10.2.0.3.0 - Production
Start Date                08-JUL-2014 17:10:50
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /users/oracle/OraHome10g/network/admin/listener.ora
Listener Log File         /users/oracle/OraHome10g/network/log/listener_usmthly.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sysreportDB.2goasp.com)(PORT=1520)))
Services Summary...
Service "USMTHLY" has 1 instance(s).
  Instance "USMTHLY", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

#通过上面的测试可以看出,监听器能够正常启动也就是说监听器的配置应该是OK的。

#另外一点发现,系统启动日志里边有127.0.0.2的环路,不知道怎么会有127.0.0.2
Setting up network interfaces:
    lo
    lo        IP address: 127.0.0.1/8
              IP address: 127.0.0.2/8

[email protected]:/var/log> ping 127.0.0.2  #环路127.0.0.2 OK
PING 127.0.0.2 (127.0.0.2) 56(84) bytes of data.
64 bytes from 127.0.0.2: icmp_seq=1 ttl=64 time=0.034 ms

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 daemondone
Oracle 10g auto start/stop
Starting Oracle10g: Startup "USMTHLY" listener.

LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 09-JUL-2014 17:15:47

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

Starting /users/oracle/OraHome10g/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.3.0 - Production
System parameter file is /users/oracle/OraHome10g/network/admin/listener.ora
Log messages written to /users/oracle/OraHome10g/network/log/listener_usmthly.log
Listening 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

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

时间: 2024-08-04 12:05:59

记一次离奇的TNS-12545 TNS-12560 TNS-00515的相关文章

TNS-12541: TNS:no listener , TNS-12542: TNS:address already in use

查看数据库监听状态不对$ lsnrctl status LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.5.0 - Production on 05-NOV-2012 08:54:08 Copyright (c) 1991, 2010, Oracle.  All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)

启动监听报错:TNS-12537: TNS:connection closed TNS-12560: TNS:protocol adapter error TNS-00507: Connection closed Linux Error: 29: Illegal seek

启动监听程序报错: 说明:在rhel5.8上安装完成oracle11g数据库后,使用netca创建完监听,启动监听时报错.还未使用dbca创建实例. [[email protected] ~]$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 02-APR-2015 08:33:53 Copyright (c) 1991, 2009, Oracle. All rights reserved. Starting

TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error:

今天是2014-06-17,遇到一个非常奇怪的问题,可能之前测试修改监听的原因,导致监听启动后自动关闭,特此记录一下整个处理过程, 监听配置文件信息如下: [[email protected] admin]$ more listener.ora # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora # Generated by Or

解决PL/SQL Developer连接数据库时出现 “ORA-12541:TNS:无监听程序”错误

在用PL/SQL Developer连接数据库时出现“ORA-12541:TNS:无监听程序”错误. 1.检查listener.log日志发现下面错误:TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:25:26 Copyright (c) 1991, 2005, Oracle. All rights reserved. 系统参数文件为D:/oracle/product/10.2.0/db_

TNS-12502: TNS:listener received no CONNECT_DATA from client

检查我们的一台ORACLE数据库的监听日志发现有不少TNS-12502错误信息.如下所示 TNS-12502: TNS:listener received no CONNECT_DATA from client   09-DEC-2014 15:47:06 * (CONNECT_DATA=(SERVICE_NAME=epps)(CID=(PROGRAM=D:\Tasks\FGIS2MES\CEG\gmt_auto.exe)(HOST=CEGWEB1)(USER=cegadmin))) * (AD

oracle数据库tns配置方法详解

TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS连接Oracle,那么客户端必须安装Oracle client

TNS-12555 TNS:permission denied

[[email protected] ~]$ lsnrctl start listenerLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 15-OCT-2014 22:53:27Copyright (c) 1991, 2011, Oracle.  All rights reserved.Starting /u01/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...TNSLSNR

Oracle 静默安装cadb错误 TNS-12547: TNS:lost contact

使用克隆安装oracle 11g 以后,然后使用cadb建库报错:ORA-12547: TNS:lost contact 对于这么一个不明显的错误,实在很难定位确认问题,网上给了很多建议: 1.缺包,libiao.ksh等 2.配置文件错误 3.环境变量不对 4.Oracle目录权限不对 5.$ORACLE_HOME/bin/oracle文件权限或文件大小不对 针对以上问题做了比较认真的检查,都没有发现问题所在. 同时使用strace对执行sqlplus / as sysdba进行了跟踪,没有发

监听报错 TNS-00525: Insufficient privilege for operation 11gR2 + 连接报错ORA-12537: TNS:connection closed

1.TNS-00525: Insufficient privilege for operation Started with pid=30869 Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora11g)(PORT=1521))) Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) TNS-12555: TNS:permissio