記一次離奇的TNS-12545 TNS-12560 TNS-00515,tns-12545tns-12560

來源:互聯網
上載者:User

記一次離奇的TNS-12545 TNS-12560 TNS-00515,tns-12545tns-12560

      最近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=      (SERVICE_NAME=USMTHLY)    )  )USBO2=  (DESCRIPTION=    (ADDRESS=      (PROTOCOL=TCP)      (HOST=10.101.1.106)      (PORT=1504)    )    (CONNECT_DATA=      (SERVICE_NAME=USBO2)    )  )#從上面的配置來看,配置無異常。#下面查看本機host及IP資訊,從下面的描述來看,主機host配置無異常oracle@sysreportDB:~> more /etc/hosts127.0.0.1       localhost# special IPv6 addresses::1             localhost ipv6-localhost ipv6-loopbackfe00::0         ipv6-localnetff00::0         ipv6-mcastprefixff02::1         ipv6-allnodesff02::2         ipv6-allroutersff02::3         ipv6-allhosts10.101.1.106    sysreportDB.2goasp.com sysreportDB  oracle@sysreportDB:~> hostnamesysreportDB# Author : Leshami# Blog   : http://blog.csdn.net/leshami#下面是其IP資訊oracle@sysreportDB:/var/log> ifconfigeth0      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)#嘗試手動啟動監聽,手動啟動監聽無異常    oracle@sysreportDB:/var/log> lsnrctl start listener_USMTHLYLSNRCTL for Linux: Version 10.2.0.3.0 - Production on 08-JUL-2014 17:10: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.logListening 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_USMTHLYVersion                   TNSLSNR for Linux: Version 10.2.0.3.0 - ProductionStart Date                08-JUL-2014 17:10:50Uptime                    0 days 0 hr. 0 min. 0 secTrace Level               offSecurity                  ON: Local OS AuthenticationSNMP                      OFFListener Parameter File   /users/oracle/OraHome10g/network/admin/listener.oraListener Log File         /users/oracle/OraHome10g/network/log/listener_usmthly.logListening 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.2Setting up network interfaces:    lo    lo        IP address: 127.0.0.1/8              IP address: 127.0.0.2/8oracle@sysreportDB:/var/log> ping 127.0.0.2  #環路127.0.0.2 OKPING 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 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


TNS-12545: 因目標主機或對象不存在,串連失敗我是用戶端,其他電腦可以串連伺服器,就我的不行,why?

先ping一下伺服器看看網路通不通,再者看下用戶端和伺服器的資料庫版本是不是一致
 
用命令lsnrctl start 啟動oracle監聽 但出現以下錯誤 該怎辦 各位幫幫忙

HOST=192.168.1.101這個IP地址不正確吧?改成正確的IP地址。
除了修改listener.ora,還要修改tnsnames.ora裡面的IP地址
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.