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 Settings\Administrator>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:\tool\oracle\oracle\product\10.2.0\db_1\network\admi

n\listener.ora

监听程序日志文件          C:\tool\oracle\oracle\product\10.2.0\db_1\network\log\listener.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:\tool\oracle\oracle\product\10.2.0\db_1\network\log\listener.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:\tool\oracle\oracle\product\10.2.0\db_1\perl\5.8.3\bin\MSWin32-x86-multi-thread\perl.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:\tool\oracle\oracle\product\10.2.0\db_1\perl\5.8.3\bin\MSWin32-x86-multi-thread\perl.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 Developer\plsqldev.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 Developer\plsqldev.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 Developer\plsqldev.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:\tool\oracle\oracle\product\10.2.0\db_1\perl\5.8.3\bin\MSWin32-x86-multi-thread\perl.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 Developer\plsqldev.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一样,监听器日志能够帮助我们解决很多日常故障问题。

原文地址:https://www.cnblogs.com/bolang100/p/9013110.html

时间: 2024-11-10 14:26:05

Oracle 监听器日志解析的相关文章

Oracle 监听器日志文件过大导致监听异常报ORA-12514 TNS 错误

出现问题现象:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务或者如下图: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败.检查看监听日志listener.log的大小是否已经超过4G. 解决方法: 删除listener.log(删除前可以先做备份),然后重启监听.监听重启后会自动创建一个新的日志文件. 补充: 在监听进程运行时,无法对listener.log做删除或者重命名操作. ----------------------------

Oracle重做日志组状态及切换解析

Oracle重做日志(redo log)是用来记录操作条目,用于数据库数据恢复.为了提高效率,oracle通常建议设置三组redo log. 一.概述 oracle重做日志组通常有四种状态,即unused,inactive,active,current. unused通常指从未被使用的日志组,即新添加的日志组. current状态为LGWR进程正把redo log buffer的日志写进日志组中. active为刚刚完成日志切换后的状态,此时该日志组中提交的事务引起的数据改变还没有完全从DB b

oracle logminer全解析

今天写篇原创的,把在工作中遇到的logminer问题总结下 (1)简介: logminer 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件. 总的说来,logminer工具的主要用途有:  1. 跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能.  2. 回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行.  3. 优化和扩容计划:可通过分析日志文件

Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linux 下使用 shell 脚本来监控 Oracle 告警日志(monitor alter log file). Linux Shell的相关参考:        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量   

Linux/Unix shell 监控Oracle监听器(monitor listener)

使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linux 下使用 shell 脚本来监控 Oracle 监听器. Linux Shell的相关参考:        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量        Linux/Unix shell 调用

转 Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

今早刚上班.客户打电话过来说系统访问不了,输入用户名.用户号不能加载出来!听到这个问题,第一时间想到的是不是服务器重新启动了,Oracle数据库的相关服务没有启动的原因.查看服务的时候,发现相关的服务都是启动的状态.第二想法就是查看的程序配置文件是否被修改过.也没有异常:第三个就是用PL/SQL连接Oracle数据库,输入登录名和密码后,提示如下错误:ora-01033:oracle initialization or shutdown in progress: 在网上搜索了一圈,终于发现几个比

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

一.错误描述 登陆PL/SQL Developer登陆本地数据库时先报没有监听程序,查看服务发现Oracle监听服务没有启动.右击启动监听程序,报错: 错误描述:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了.一些服务自动停止,如果它们没有什么可做的,例如 "性能日志和警报 "服务. 二.原因分析 你安装oracle的时候是连网的,那么listener.ora文件里的HOST=网络给你分配的IP地址,而在你断网的时候就会出现这样的情况.

入门基础:浅析Oracle监听器安装与配置

本地服务名(Tnsname) Oracle客户端与服务器端的连接是通过客户端发出连接请求,由服务器端监听器对客户端连接请求进行合法检查,如果连接请求有效,则进行连接,否则拒绝该连接. 本地服务名是Oracle客户端网络配置的一种,另外还有Oracle名字服务器(Oracle Names Server)等.Oracle常用的客户端配置就是采用的本地服务名,本文中介绍的也主要是基于本地服务名的配置. Oracle网络连接配置方法 配置Oracle服务器端与客户端都可以在其自带的图形化Oracle网络

Oracle重做日志恢复数据模拟实验

一 系统环境: 1.操作系统:oracle Linux 5.6 2.数据库: Oracle 11g 二 Oracle 重做日志的作用: [模拟介质恢复] 1. 关闭数据库归档模式: [[email protected] ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on Mon Feb 6 23:49:30 2017 Copyright (c) 1982, 2009, Oracle. All rights reserved.