背景:
数据库一直运行的很好,但是今天却出现了致命的一击,公司的应用程序大约在10:30分的时候,所有的站点都不能访问,页面只提示找不到站点,起初以为网路,或者VIP的问题,查了半天没有半点消息,接着去查了weblogic,发现和数据库连接的pool状态是invalid,马上去查oracle 10g DB.
问题:
首先要查DB的监听程序是否工作正常,当运行命令:
lsnrctl status |
直接卡死,数据库如果死机,那就是悲剧中的悲剧!在查看了一下数据库,都运行正常,查看alter.log,也只提示fal_client,犹豫不决的我用了kill
ps -ef | grep LISTENER oracle 25478 1 0 06:47 ? 00:00:00 /home/oracle/OraBase/OraHome1/bin/tnslsnr LISTENER -inherit root 25932 25786 0 08:40 pts/1 00:00:00 grep LISTENER kil -9 25478 |
重启监听报以下错误:
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
解决:
这是只能借助google你了,在网上搜了一番,发现原因是:
数据库服务器操作系统为Red Hat AS4,属于32位操作系统,最大文本文件不能超过2G。当$ORACLE_HOME/network/log中listener.log大小等于2G的时候,无法继续写入日志,监听服务会自动停掉,启动或停止listener时都会报错:
1.经常手工去清除listener.log文件的内容,在数据库服务器执行以下命令
cd $ORACLE_HOME/network/log cat </dev/null> listener.log |
2、让命令lsnrctl不记录log,在数据库服务器执行以下命令
lsnrctl set log_status off quit |
也可以在listener.ora文件中加入logging_listener=off,即可关闭监听日志。
当我满怀希望的运行lsnrctl status 启动监听时,用报错了:
Starting /home/oracle/OraBase/OraHome1/bin/tnslsnr: please wait...
/home/oracle/OraBase/OraHome1/bin/tnslsnr: error while loading shared libraries: libclntsh.so.10.1: cannot open shared object file: No such file or directory
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 32: Broken pipe
找不到文件肯定是路径没有设置对,这时突然想到自己用root 运行的命令,切换到oracle用户再查运行,这次成功了!虽然数据库OK了,但是应用程序还是不行,这时重启weblogic就可以了!
发现干这行,没有经验能吓死人!