listener.log过大导致Oracle数据库连接缓慢报错解决方案(c3p0连接池死锁 APPARENT DEADLOCK,druid没有反应,然后pl/sql登陆很慢)

一、出现的情况描述
1. 控制台打印信息:c3p0连接池死锁 APPARENT DEADLOCK 
2. pl/sql登陆时很慢,登陆上去后正常
3. cmd测试命令:tnsping oracl,很长时间没有反应


二、原因
在ORACLE数据库中,如果不对监听日志文件(listener.log)进行截断,那么监听日志文件(listener.log)会变得越来越大.
项目后期运维过程中,需要对监听日志文件(listener.log)进行定期清理。 
1:监听日志文件(listener.log)变得越来越大,占用额外的存储空间 
2:监听日志文件(listener.log)变得太大会带来一些问题,查找起来也相当麻烦 
3:监听日志文件(listener.log)变得太大,给写入、查看带来的一些性能问题、麻烦
4.   监听日志文件(listener.log)过大导致oracle连接访问延迟假死
5.   然后通过cmd命名测试tnsping oracl,反应很快(小于100毫秒)

三、解决方案
(Windows服务器)
1.关闭数据库实例服务OracleServiceORCL和监听服务OracleOraDb11g_home1TNSListener。
2.找到文件所在路径,一般情况listener.log路径:$ORACLE_HOME\diag\tnslsnr\机器名\listener\trace\listener.log,
事件管理平台的路径为:
复制备份 listener.log ,备份文件重名为日期格式如listener.log.2018.01.31 ,删除原文件,并新建一个listener.log空文件。
3.先启动监听服务OracleOraDb11g_home1TNSListener,再启动数据库实例服务OracleServiceORCL


(Linux服务器)
可以通过 lsnrctl status 也可以查看listener.log位置。
1:首先停止监听服务进程(tnslsnr)记录日志。


oracle@entel2:[/oracle]$lsnrctl  set log_status off


2:将监听日志文件(listener.log)复制一份,以listener.log.yyyymmdd格式命名


oracle@entel2:[/oracle]$cp listener.log listener.log.20180131


3:将监听日志文件(listener.log)清空。清空文件的方法有很多


oracle@entel2:[/oracle]$echo "" > listener.log
或者
oracle@entel2:[/oracle]$cp /dev/null listener.log
或者
oracle@entel2:[/oracle]$echo /dev/null > listener.log
或者
oracle@entel2:[/oracle]$>listener.log


4:开启监听服务进程(tnslsnr)记录日志


oracle@entel2:[/oracle]$lsnrctl set log_status on


当然也可以移走监听日志文件(listener.log),数据库实例会自动创建一个listener.log文件。


oracle@entel2:[/oracle]$ lsnrctl set log_status off


oracle@entel2:[/oracle]$mv listener.log listener.yyyymmdd


oracle@entel2:[/oracle]$lsnrctl set log_status on

你可能感兴趣的:(oracle)