Oracle EBS系统数据库监听报错TNS-12547、TNS-12560和TNS-00517解决方法

         记得有一次Oracle EBS系统中止运行3小时,实在比较一次惨痛的教训,让我至今记忆犹新。

         问题症状:用户反映提交的请求全部是红色错误

         开始意为是并发管理“标准管理器”的问题,在Oracle EBS系统中重启该管理器和服务器上用命令重启都没有启作用。只能重启Oracle EBS相关服务。但是,在启动Oracle DB的监听时提示错误:

[oraprod@prod log]$ lsnrctl start PROD

LSNRCTL for Linux: Version 9.2.0.6.0 - Production on 16-JAN-2015 10:49:02

Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.

Starting /ora/proddb/9.2.0/bin/tnslsnr: please wait...

TNS-12547: TNS:lost contact
 TNS-12560: TNS:protocol adapter error
  TNS-00517: Lost contact
   Linux Error: 32: Broken pipe

       此时,输入命令:lsnrctl start 启动监听服务是正常。但是,以前启动Oracle监听必须要指定例实名(SID)。因此,不敢接下启用Oracle DB其它服务和Oracle EBS应用服务。

       通过Oracle官方了解: 数据库服务器操作系统为Red Hat AS4,属于32位操作系统,最大文本文件不能超过2G。当$ORACLE_HOME/network/log中listener.log大小等于2G的时候,无法继续写入日志,监听服务会自动停掉,启动或停止listener时都会报错。适好我们的服务器操作系统是32位的。但是,查找到$ORACLE_HOME/network/log目录下文件,基本上没有一个文件超1M。看来监听日志文件手工修改过配置。

[oraprod@prod log]$ cd $ORACLE_HOME/network/log
[oraprod@prod log]$ ll -h
total 108K
-rw-r--r--  1 oraprd dba  955 May 12  2013 clone.log
-rw-r--r--  1 oraprd dba  480 Jun  5  2013 prod.log
-rw-r--r--  1 oraprd dba 4.0K Jan 16 09:58 listener11.log
-rw-r--r--  1 oraprd dba 4.3K Jan 16 09:16 listener.log
-rw-r--r--  1 oraprd dba  475 Apr  5  2011 prod.log
-rw-r--r--  1 oraprd dba  55K Apr  7  2014 sqlnet.log
[oraprod@prod log]$ 

       接着,输入命令:$TNS_ADMIN

[oraprd@prod ~]$ cd $TNS_ADMIN
[oraprd@prod PROD_prod]$ pwd
/ora/proddb/9.2.0/network/admin/PROD_prod
[oraprd@prod PROD_prod]$ ll -h
total 40K
-rw-r--r--  1 oraprd dba    2 Jan 20  2011 listener_ifile.ora
-rw-r--r--  1 oraprd dba 1.3K Jun  5  2013 listener.ora
-rw-r--r--  1 oraprd dba    2 Jan 20  2011 sqlnet_ifile.ora
-rw-r--r--  1 oraprd dba  609 Jun  5  2013 sqlnet.ora
-rw-r--r--  1 oraprd dba 1.9K Jun  5  2013 tnsnames.ora
 
 

与最近备份的数据,比较文件:listener.ora、tnsnames.ora和sqlnet.ora等等文件均是一致没有修改过,说明监听配置没有问题。

    输入命令:lsnrctl

[oraprd@prod ~]$ lsnrctl
-bash: lsrnctl: command not found

想通过lsnrctl命看查找配置监听日志文件的路径无法操作。可能是监听日志文件超过2G导致的。

幸好,在我一次不经意的输入:cd ..发现有一个日志文件超过2G.

[oraprd@prod PROD_prod]$ cd ..
[oraprd@prod admin]$ ll
total 5194376
drwxr-xr-x  2 oraprd dba       4096 Jun  5  2013 PROD_prod
-rw-r--r-- 1  oraprd dba 2147483647 Jan 16 08:27 prod.log
-rw-r--r--  1 oraprd dba        825 Apr 26  2002 libnk59.def
-rw-r--r--  1 oraprd dba       1170 Jan 20  2011 listener.ora
drwxrwxr-x  2 oraprd dba       4096 Jun 24  2003 samples
-rw-r--r--  1 oraprd dba        130 Mar 19  2002 shrept.lst
-rw-r--r--  1 oraprd dba         24 Aug  8  2000 snmp_ro.ora
-rw-r--r--  1 oraprd dba       1025 Jan 20  2011 tnsnames.ora

只能抱着试一试的态度,重命名prod.log文件。然后,就能正常能启用Oracle DB监听了。输入:lsnrctl也可以正常了

查看一下系经配置监听日志文件的名称和目录

[oraprd@prod admin]$ lsnrctl status PROD

LSNRCTL for Linux: Version 9.2.0.6.0 - Production on 26-JAN-2015 19:28:11

Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROCPROD))
STATUS of the LISTENER
------------------------
Alias                     PROD
Version                   TNSLSNR for Linux: Version 9.2.0.6.0 - Production
Start Date                26-JAN-2015 06:35:49
Uptime                    0 days 12 hr. 52 min. 22 sec
Trace Level               off
Security                  OFF
SNMP                      OFF
Listener Parameter File   /ora/proddb/9.2.0/network/admin/PROD_prod/listener.ora
Listener Log File         /ora/proddb/9.2.0/network/admin/prod.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROCPROD)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxx.xxx.com)(PORT=xxxx)))
Services Summary...
Service "PROD" has 2 instance(s).
  Instance "PROD", status UNKNOWN, has 1 handler(s) for this service...
  Instance "PROD", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

原来,Oracle EBS的数据库监听日志文件和目录与我们平时安装Oracle DB的默认不一致。

标准Oracle DB默认为$ORACLE_HOME/network/log目录下

Oracle EBS默认目录:$ORACLE_HOME/network/admin 和 监听日志文件名为SID.log

总结,由于监听日志文件增长的速度比较慢,往往在做Oracle EBS健康检查时会被忽略。以往只会注意检查表空间大小、Oracle EBS应用服务日志、Oracle EBS请求输出目录和Oracle DB告警日志等等。因此,以后把监听日志文件大小也要纳入日常检查范围。

你可能感兴趣的:(Oracle EBS系统数据库监听报错TNS-12547、TNS-12560和TNS-00517解决方法)