记得有一次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告警日志等等。因此,以后把监听日志文件大小也要纳入日常检查范围。