Oracle 启动监听报错TNS-12547: TNS:lost contact


背景:

数据库一直运行的很好,但是今天却出现了致命的一击,公司的应用程序大约在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就可以了!

发现干这行,没有经验能吓死人!


你可能感兴趣的:(oracle,数据库,linux,weblogic,logging,数据库服务器)