我所不知道的的监听日志问题

今天,有开发人员向我反馈:“代码时有连不上数据库的情况发生”。在了解了一些基本情况之后,希望能通过查看监听日志获取问题线索。首先是通过如下方式确定监听日志的存放路径:

LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 21-JUN-2016 21:19:56

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production
Start Date                21-JUN-2016 12:02:41
Uptime                    0 days 9 hr. 17 min. 15 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener_rac1.log
Listening Endpoints Summary...

监听日志被用于记录客户端向服务端的建立连接的情况,同时也会记录监听注册和动态注册等方面的信息。在查看监听日志的过程中,发现日志文件较大,vi编辑器打开较慢,只好通过tail -10000 listener_rac1.log > view.txt的方式转储其内容,其中并无开发人员所描述的连接不上的情况记录。日志节选部分内容如下:

21-JUN-2016 21:22:13 * service_update * dsdb1 * 0
21-JUN-2016 21:22:13 * service_update * dsdb1 * 0
21-JUN-2016 21:22:33 * (CONNECT_DATA=(SID=dsdb1)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=root))) * (ADDRESS=(PROTOCOL=tcp)(HOST=198.168.9.53)(PORT=36304)) * establish * dsdb1 * 0
21-JUN-2016 21:22:33 * (CONNECT_DATA=(SID=dsdb1)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=root))) * (ADDRESS=(PROTOCOL=tcp)(HOST=198.168.9.53)(PORT=36303)) * establish * dsdb1 * 0
21-JUN-2016 21:23:03 * (CONNECT_DATA=(SID=dsdb1)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=root))) * (ADDRESS=(PROTOCOL=tcp)(HOST=198.168.9.53)(PORT=36907)) * establish * dsdb1 * 0

在寻找答案的过程中发现“LISTENER.LOG日志大小不能超过2GB,超过会导致LISTENER监听器无法处理新的连接”这样一条线索。但是又说该类问题“只是发生在老旧的32bit Linux或Unix系统下面,真实的原因是一些32bit OS自带的文件系统不支持2GB以上的文件,导致监听服务进程(tnslsnr)append write日志文件出错”。我的环境可是64位的Linux系统啊,不管怎么样,还是希望处理一下过大的日志文件(722MB)。那么该如何处理这个文件呢?是否可以基于处理alert日志的经验,直接删除或重命名文件呢?

实践证明,这样做是不可行的。尽管已经将日志文件重命名,但是连接信息依旧记录到了重命名后的日志文件中。怎样才是正确的截断监听日志的做法呢?其实大可不必去百度和Google,只用LSNRCTL的help就可以解决问题(有时候Oracle工具的内置帮助还是很贴心的):

LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:

start               stop                status
services            version             reload
save_config         trace               spawn
change_password     quit                exit
set*                show*               

没错。就是用set命令!set要怎么用呢?还可以继续help,方法如下:

LSNRCTL> set help
The following operations are available after set
An asterisk (*) denotes a modifier or extended command:

password                    rawmode
displaymode                 trc_file
trc_directory               trc_level
log_file                    log_directory
log_status                  current_listener
inbound_connect_timeout     startup_waittime
save_config_on_stop         dynamic_registration        

所以,截断监听日志的正确做法应该按如下步骤进行:

1.停止监听服务进程记录日志:set log_status off

2.重命名或删除监听日志文件

3.开启监听服务进程记录日志:set log_status on

log_file:用于指定监听日志的存放路径。通常,在截断监听日志之后,监听服务进程会在默认的路径下创建一个名为Listener.log的文件,但是在我的环境中,监听日志的的名字为Listener_rac1.log,所以会用到这个命令。另外还要注意一点的是,log_file命令只有在log_status为ON的状态下才能正确的使用。

一个小小的监听日志的截断就有这么多名堂,Oracle的复杂性还真是名不虚传!开发人员反馈的问题没有解决,但是也没有重现。学到了一些过去没有注意到的知识,权当是收获了!

时间: 2024-07-31 14:20:07

我所不知道的的监听日志问题的相关文章

有关监听日志的清理问题

近日,有开发人员向我反馈:“代码时有连不上数据库的情况发生”.在了解了一些基本信息之后,希望能通过查看监听日志获取问题线索.首先是通过如下方式确定监听日志的存放路径: LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 21-JUN-2016 21:19:56 Copyright (c) 1991, 2007, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp

ORACLE清理、截断监听日志文件(listener.log)

在ORACLE数据库中,如果不对监听日志文件(listener.log)进行截断,那么监听日志文件(listener.log)会变得越来越大,想必不少人听说过关于"LISTENER.LOG日志大小不能超过2GB,超过会导致LISTENER监听器无法处理新的连接",当然这个不是真理,不会绝对出现,只是发生在老旧的32bit Linux或Unix系统下面,真实的原因是一些32bit OS自带的文件系统不支持2GB以上的文件,导致监听服务进程(tnslsnr)append write日志文件

『ORACLE』 清理监听日志(11g)

停止监听服务进程(tnslsnr)记录日志.lsnrctl  set log_status off; 将监听日志文件(listener.log)复制一份,以listener.log.yyyymmdd格式命名cp listener.log listener.log.20170521 将监听日志文件(listener.log)清空. cat /dev/null > listener.log 开启监听服务进程(tnslsnr)记录日志lsnrctl set log_status on; 对于这种lis

Oracle 11g 监听很慢,由于监听日志文件太大引起的问题(Windows 下)

现象:Windows 操作系统的Oracle 数据库,使用sqlplus 连接(不指定实例名)连接很快,程序连接或使用连接工具或在Net Manager 中测试连接都需要花费约三四十秒的时间(程序连接可能失败). 通过tsping localhost 测试,亦花费三四十秒. 查看监听警告日志(所在位置在文章后面介绍),有信息如下: <msg time='2017-05-16T16:57:51.811+08:00' org_id='oracle' comp_id='tnslsnr' type='U

oracle 登录数据库时报 无监听 的一种解决方式(监听日志文件达到4g默认上限)

问题:登录服务器时 报无监听服务 检查步骤: 1.进入sqlplus查看数据库的状态,显示当前数据库的状态为OPEN 脚本:select status from v$Instance; 2.检查数据库的监听服务,登录的时候发现进入监听程序的速度非常慢 脚本:lsnrctl status 3.查看监听日志的大小,位置如下: $ORACLE_BASE\diag\tnslsnr\<hostname>\listener\trace\ 5.重启启动监听即可: lsnrctl stop  停止 lsnrc

11g生产环境监听日志告警问题处理-Subscription?for

1.系统报错 Command:?failed????????stdout:?yes???????????stderr:?no Before?command?completion,?additional?instructions?may?appear?below. Initializing?mkcd?log:?/var/adm/ras/mkcd.log... Verifying?command?parameters... Creating?image.data?file... Creating?m

Shell: extract more from listener.log (分析oracle监听日志)

最近遇到了两起数据库连接数不足的问题, 通常都会预留一些会话增加的情况, 但在一些特殊情况下如连接风暴(logon storm), 如果在监听中没有做rate限流,对数据库来说巨大的冲击可能会导致数据库Hang 或 ora-20 或ora-18 错误. 对于Hang并伴有进程数不足的情况,AWR.ASH 都可能无法升成,甚至数据库都无法登录或做SSD 都不成功, 这时候LISTENER.LOG 就成了"破案"时关键的线索. 下面记录分享一些分析listener.log的一些脚本.(No

java实时监听日志写入kafka(转)

原文链接:http://www.sjsjw.com/kf_cloud/article/020376ABA013802.asp 目的 实时监听某目录下的日志文件,如有新文件切换到新文件,并同步写入kafka,同时记录日志文件的行位置,以应对进程异常退出,能从上次的文件位置开始读取(考虑到效率,这里是每100条记一次,可调整) 源码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File;

java实时监听日志写入kafka

目的 实时监听某目录下的日志文件,如有新文件切换到新文件,并同步写入kafka,同时记录日志文件的行位置,以应对进程异常退出,能从上次的文件位置开始读取(考虑到效率,这里是每100条记一次,可调整) 源码: [java] view plain copy import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import j