oracle 监听器日志解析,数据库详解:Oracle 监听器日志解析

Oracle监听器是驻留在Oracle实例所在服务器上的独立进程。作为客户端进程连接实例的重要沟通组件,Oracle监听器扮演着重要的地位。本篇将从监听器日志入手,分析阅读监听器日志和日常监听器常见行为。

1、Oracle监听器功能

在笔者《说说Oracle监听器》(http://space.itpub.net/17203031/viewspace-682627)系列中,已经比较清楚的介绍过Oracle监听器的工作方式和体系地位。这里简要加以累述。

ü Oracle监听器是一个独立的操作系统进程,运行在操作系统进程列表中。拥有独立于数据库实例的启动、终止命令控制台(lsnrctl);ü Oracle监听器进程伺候在服务器一个特定端口上(默认为1521),等待通过Oracle Net Service连入到服务器的客户端请求;ü 另一方面,Oracle监听器根据系统设置情况(各种环境变量)接受数据库实例的服务列表。服务Service是对外提供的服务名称,供本地命名服务依据Service名称连入到其中。Service是对应数据库SID,也就是指定的Oracle实例数据库位置。建立和维护服务列表的过程叫做注册register;ü 注册register过程分为两种,静态注册和动态注册。静态注册就是通过直接将服务名写死在listener.ora文件中。动态注册是通过pmon后台进程周期性的到监听器来注册;ü 当一个client请求通过TCP协议访问到特定端口的监听程序,Oracle监听器会对比请求中的Service名称和掌握的注册Service列表。如果不匹配,就拒绝。如果匹配,就定位到了特定的实例,包括Oracle_home地址;ü 监听程序不负责进行用户名密码的验证,此时会向Oracle实例请求一个Server Process与client Process进行你个交互;

2、Oracle监听器状态信息

在大部分平台下,我们可以通过lsnrctl监听器控制程序与监听器进行交互和控制操作。其中,使用status命令,可以获取到当前监听器状态信息。

C:Documents and SettingsAdministrator>lsnrctl status

LSNRCTL for 32-bit Windows: Version10.2.0.1.0 – Production on 29-6月-2011 13:41:27

Copyright (c) 1991, 2005, Oracle. All rights reserved.正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=acca-119hs63yxc)(PORT=1521)))

LISTENER的STATUS

————————

别名 LISTENER版本 TNSLSNR for 32-bit Windows: Version10.2.0.1.0 – Produ ction启动日期 29-6月-2011 10:51:26正常运行时间 0天2小时50分3秒跟踪级别 off安全性 ON: Local OS Authentication SNMP OFF监听程序参数文件 C:ooloracleoracleproduct10.2.0db_1

etworkadmi nlistener.ora监听程序日志文件 C:ooloracleoracleproduct10.2.0db_1

etworkloglistener.log监听端点概要……

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=acca-119hs63yxc)(PORT=1521)))

服务摘要……

服务"OTSXDB"包含1个例程。

例程"ots",状态READY,包含此服务的1个处理程序……

服务"OTS_XPT"包含1个例程。

例程"ots",状态READY,包含此服务的1个处理程序……

服务"ots"包含1个例程。

例程"ots",状态READY,包含此服务的1个处理程序……

命令执行成功

命令status可以查看当前监听器的所有信息。当前监听器对应的服务包括三个,分别为otsxdb、otx_xpt和ots.三个服务名是对外使用的,本质上对应的Oracle实例都是ots.

监听器进程工作都有对应的日志信息,在状态显示中,我们也可以看到日志文件位置(C:ooloracleoracleproduct10.2.0db_1

etworkloglistener.log)。下面我们从一个新的日志文件,看监听器工作。

3、Oracle监听器日志解析

下面是我们截取的监听器片段,篇幅原因,有省略。

以pid=2736开始监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=acca-119hs63yxc)(PORT=1521)))

Listener completed notification to CRS on start

TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE 29-6月-2011 10:51:27 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0 29-6月-2011 10:51:39 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0 29-6月-2011 10:52:00 * (CONNECT_DATA=(SID=OTS)(CID=(PROGRAM=C:ooloracleoracleproduct10.2.0db_1perl5.8.3inMSWin32-x86-multi-threadperl.exe)(HOST=ACCA-119HS63YXC)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.93)(PORT=3126)) * establish * OTS * 12505 TNS-12505: TNS:监听程序当前无法识别连接描述符中所给出的SID 29-6月-2011 10:52:00 * service_register * ots * 0 29-6月-2011 10:52:11 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0 29-6月-2011 10:52:48 * service_update * ots * 0 29-6月-2011 10:53:00 * service_update * ots * 0

(有省略……)

29-6月-2011 10:53:17 * ping * 0 29-6月-2011 10:53:18 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=SYSTEM))(COMMAND=status)(ARGUMENTS=64)(SERVICE=(ADDRESS=(PROTOCOL=TCP)(HOST=acca-119hs63yxc)(PORT=1521)))(VERSION=169869568)) * status * 0 29-6月-2011 10:53:29 * (CONNECT_DATA=(SID=OTS)(CID=(PROGRAM=C:ooloracleoracleproduct10.2.0db_1perl5.8.3inMSWin32-x86-multi-threadperl.exe)(HOST=ACCA-119HS63YXC)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.93)(PORT=3141)) * establish * OTS * 0 29-6月-2011 10:53:57 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:PLSQL Developerplsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1760)) * establish * ots * 0 29-6月-2011 10:54:00 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:PLSQL Developerplsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1761)) * establish * ots * 0 29-6月-2011 10:54:00 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:PLSQL Developerplsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1762)) * establish * ots * 0 29-6月-2011 10:54:03 * service_update * ots * 0 29-6月-2011 10:54:09 * service_update * ots * 0

日志内容很多,我们分为重点的几个部分。

在日志头,Oracle告知了我们日志格式,使用*进行内容分割。

TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE

其中包括连接时间时间,请求数据Data和其他相关事件信息。这些可以帮助我们分析日志内容。

ü 监听器无法找到指定服务

对应片段:

29-6月-2011 10:52:00 * (CONNECT_DATA=(SID=OTS)(CID=(PROGRAM=C:ooloracleoracleproduct10.2.0db_1perl5.8.3inMSWin32-x86-multi-threadperl.exe)(HOST=ACCA-119HS63YXC)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.93)(PORT=3126)) * establish * OTS * 12505 TNS-12505: TNS:监听程序当前无法识别连接描述符中所给出的SID

分析日志格式后,可以发现在这个时间(10:52),Oracle监听器接受到程序的访问,程序来自主机(ACCA-119HS63YXC),使用system用户登录,程序名称是perl.exe.由于当前系统没有注册Service信息,也没有注册SID信息,所以不能够连接识别对SID=OTS请求。

报错无法识别SID.

ü 实例主动进行动态注册

此时,数据库服务器先于监听程序启动,默认要等待很长的时间才会发生动态注册。我们使用alter system register;命令手动启动动态注册过程。监听程序上发现pmon进程的注册进程,并且记录在日志中。

29-6月-2011 10:52:00 * service_register * ots * 0

将数据库sid=ots对应的三个实例进行注册。

ü 用户Client连接进程

当出现连接请求的时候,日志记录。

29-6月-2011 10:55:19 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:PLSQL Developerplsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1782)) * establish * ots * 0

根据日志格式,可以理解为从远程(HOST=LIUZIYU-PC,IP=10.1.39.40)主机通过TCP协议访问到监听程序,要求连接到ots服务上。使用的程序是pl/sql developer.

ü 周期性pmon注册

动态注册是一种经常性的注册行为,pmon每隔几分钟的时间就会向监听器进行一次注册动作。

29-6月-2011 10:55:33 * service_update * ots * 0

4、结论

监听器是我们经常打交道的数据库组件之一。同数据库的alert_log一样,监听器日志能够帮助我们解决很多日常故障问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值