oracle 啟動監聽報錯TNS-12547: TNS:lost contact

germany006發表於2013-12-02
轉載地址:http://blog.csdn.net/liqfyiyi/article/details/7534018

監聽啟動出錯,報以下錯誤:
lsnrctl start
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 06-JUL-2009 14:37:59
Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.
Starting /opt/oracle/product/9ir2/bin/tnslsnr: please wait...
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 32: Broken pipe





資料庫伺服器作業系統為Red Hat AS4,屬於32位作業系統,最大文字檔案不能超過2G。

當$ORACLE_HOME/network/log中listener.log大小等於2G的時候,無法繼續寫入日誌,監聽服務會自動停掉,啟動或停止listener時都會報錯

資料庫伺服器作業系統為Red Hat AS4,屬於32位作業系統,最大文字檔案不能超過2G。

當$ORACLE_HOME/network/log中listener.log大小等於2G的時候,無法繼續寫入日誌,監聽服務會自動停掉,啟動或停止listener時都會報錯

解決辦法:

1.經常手工去清除listener.log檔案的內容,在資料庫伺服器執行以下命令

       cd $ORACLE_HOME/network/log

       cat listener.log

2、讓命令lsnrctl不記錄log,在資料庫伺服器執行以下命令

       lsnrctl

       set log_status off


       quit

     也可以在listener.ora檔案中加入logging_listener=off,即可關閉監聽日誌

 

可能跟這個問題相關的第二種情況,錯誤資訊如下:
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 104: Connection reset by peer

這個問題應該跟主機名有關了,檢視/etc/hosts檔案
[root@olivenan root]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost

然後檢視listener.ora檔案,發現HOST=ixdba

應該是這裡的問題了,那麼只需在/etc/hosts增加如下即可

[root@olivenan root]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1  localhost
127.0.0.1  ixdba


 

以下是另外一種情況


 今天上午,遇到一個問題,客戶容災庫其中一個節點啟動監聽報錯 TNS-12547: TNS:lost contact (另外一個節點啟動正常)

根據抱錯,懷疑是lintener.log日誌檔案太大了,超過2G了,所以無法啟動,還有一個可能是/etc/hosts 目錄下沒有 127.0.0.1     loopback localhost 記錄,這是通常導致此錯誤的常見原因

檢視lintener.log日誌檔案,大小遠不足2G,第一種可能排除;

r2:/oracle/app/oracle/product/9.2.0/network/log>ls -lrt
total 24
drwxr-xr-x   2 oracle   dba             256 Nov 15 2007  bak
-rw-r--r--   1 oracle   dba            6414 Feb 24 15:32 sqlnet.log
-rw-r--r--   1 oracle   dba            3025 Jul 09 11:38 listener.log

檢視/etc/hosts的內容:127.0.0.1     loopback localhost      # loopback (lo0) name/address也正常,第二種可能排除

/etc/hosts
#
# This file contains the hostnames and their address for hosts in the
# network.  This file is used to resolve a hostname into an Internet
# address. 
#
# At minimum, this file must contain the name and address for each
# device defined for TCP in your /etc/net file.  It may also contain
# entries for well-known (reserved) names such as timeserver
# and printserver as well as any other host name and address.
#
# The format of this file is:
# Internet Address      Hostname        # Comments
# Items are separated by any number of blanks and/or tabs.  A '#'
# indicates the beginning of a comment; characters up to the end of the
# line are not interpreted by routines which search this file.  Blank
# lines are allowed.

# Internet Address      Hostname        # Comments
# 192.9.200.1           net0sample      # ethernet name/address
# 128.100.0.1           token0sample    # token ring name/address
# 10.2.0.2              x25sample       # x.25 name/address
127.0.0.1               loopback localhost      # loopback (lo0) name/address

這裡依舊嘗試了一下,rm lintener.log,在touch一個listener.log,在啟動監聽

Lsnrctl stop  -----先停掉listener
rm listener.log ----cd $ORACLE_HOME/network/log
touch listener.log
lsnrctl start

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=135.10.34.38)(PORT=1521)))
TNS-12547: TNS:lost contact
 TNS-12560: TNS rotocol adapter error
  TNS-00517: Lost contact
   IBM/AIX RISC System/6000 Error: 73: Connection reset by peer

報錯依舊,檢視lintener.log裡的記錄
09-JUL-2008 12:17:05 * 12546
TNS-12546: TNS ermission denied
 TNS-12560: TNS rotocol adapter error
  TNS-00516: Permission denied


檢視其程式:
r2:/oracle/app/oracle/product/9.2.0/network/admin>ps -ef |grep lsnr
  oracle 192870 168578   0 12:16:13  pts/9  0:00 grep lsnr
  oracle 254244 274714   0 11:06:44  pts/0  0:00 lsnrctl
  oracle 242390      1   0 11:06:57  pts/0  0:00 /oracle/app/oracle/product/9.2.0/bin/tnslsnr LISTENER -inherit
rzyzdb2:/oracle/app/oracle/product/9.2.0/network/admin>

kill -9 242390


r2:/oracle/app/oracle/product/9.2.0/network/log>lsnrctl start

LSNRCTL for IBM/AIX RISC System/6000: Version 9.2.0.8.0 - Production on 09-JUL-2008 12:24:21

Copyright   1991, 2006, Oracle Corporation.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=135.10.34.38)(PORT=1521)))
TNS-12537: TNS:connection closed
 TNS-12560: TNS rotocol adapter error
  TNS-00507: Connection closed

檢視節點2的sqlnet.ora發現:
問題就在此(sqlnet.ora裡面有ip限制的,38這個ip,也就是出故障的這個ip不再sqlnet.ora內容裡,將38新增到sqlnet.ora後,啟動正常)




自我總結:
服務端:
1、
在修改完/etc/hosts檔案後,需將hostname臨時重置一下。
[root@localhost ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 zwl localhost



(這個可以忽略)
2、/u01/oracle/product/10.2.0/network/admin/sqlnet.ora
tcp.validnode_checking=no    SQLNET.AUTHENTICATION_SERVICES= (ALL)


3、檢查例項名
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ cat .bash_profile 
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
export ORACLE_SID=ora10g  
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib


4、檢查監聽
[oracle@localhost ~]$ cat /u01/oracle/product/10.2.0/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/oracle/product/10.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ora10g)
      (ORACLE_HOME = /u01/oracle/product/10.2.0)
      (SID_NAME = ora10g)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.46.131)(PORT = 1521))
  )

[oracle@localhost ~]$ lsnrctl status


LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 17-DEC-2013 16:50:40


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


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.46.131)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                17-DEC-2013 16:31:26
Uptime                    0 days 0 hr. 19 min. 14 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/oracle/product/10.2.0/network/admin/listener.ora
Listener Log File         /u01/oracle/product/10.2.0/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.46.131)(PORT=1521)))
Services Summary...
Service "ora10g" has 1 instance(s).
  Instance "ora10g", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

客戶端:
1、tnsnames.ora可以手動新增
D:\app\Administrator\product\11.1.0\client_1\NETWORK\ADMIN\tnsnames.ora

ORA10G =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.46.131)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora10g)
    )
  )
2、客戶端cmd   tnsping ora10g  能解析即OK,或者使用Net manager 配置一下tns也一樣,和第一步效果是一樣的,然後就可以使用pl/sql訪問了。
注意tnsping 的有可能是網路服務名,這個可以看一下Net manager 配置。但是也可能是例項名與網路服務名是一樣的。直接寫檔案tnaname.ora也是一樣的道理。

C:\Documents and Settings\Administrator> tnsping ora10g_clone2
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 17-12月-
2013 16:33:50
Copyright (c) 1997, 2007, Oracle.  All rights reserved.
已使用的引數檔案:
D:\app\Administrator\product\11.1.0\client_1\network\admin\sqlnet.ora
已使用 TNSNAMES 介面卡來解析別名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.46.131)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora10g)))
OK (10 毫秒)

C:\Documents and Settings\Administrator> tnsping ora10g_clone3
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 17-12月-
2013 16:38:27
Copyright (c) 1997, 2007, Oracle.  All rights reserved.
已使用的引數檔案:
D:\app\Administrator\product\11.1.0\client_1\network\admin\sqlnet.ora
已使用 TNSNAMES 介面卡來解析別名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.46.128)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora10g)))
OK (0 毫秒)





3、客戶端監聽與tns

D:\app\Administrator\product\11.1.0\client_1\NETWORK\ADMIN\tnsnames.ora

ORA10G_CLONE2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.46.131)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora10g)
    )
  )


ORA10G_CLONE3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.46.128)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora10g)
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = Oracle8)
      (SID_NAME = ora10g)
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.46.128)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.46.131)(PORT = 1521))
    )
  )



一般監聽發生問題需檢查如下五項

1、/etc/hosts及域名解析配置檔案(注意hostname要和tnsname.ora的host一致,實在搞不清楚就直接使用固定的IP地址吧)

2、監聽日誌大小

3、監聽狀態

4、$ORACLE_HOME/oracle可執行檔案許可權
5、檢查資料庫配置show parameter local_listener


總結:
show parameter local_listener查到的引數
NAME                                     TYPE          VALUE
------------------------------------ ----------- ------------------------------
local_listener                         string          ORA11G

該VALUE引數對應了tnsnames.ora檔案中的監聽配置
ORA11G =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA11G)
    )
  )

LISTENER_ORA11G =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))










來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-1061905/,如需轉載,請註明出處,否則將追究法律責任。

相關文章