zoukankan      html  css  js  c++  java
  • Oracle 监听器日志解析

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

     

     

    1Oracle监听器功能

     

    在笔者《说说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进行你个交互;

     

     

    2Oracle监听器状态信息

     

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

     

     

    C:Documents and SettingsAdministrator>lsnrctl status

     

    LSNRCTL for 32-bit Windows: Version 10.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: Version 10.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)。下面我们从一个新的日志文件,看监听器工作。

     

     

    3Oracle监听器日志解析

     

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

     

     

    以 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一样,监听器日志能够帮助我们解决很多日常故障问题。

  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/bolang100/p/9013110.html
Copyright © 2011-2022 走看看