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 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)。下面我们从一个新的日志文件,看监听器工作。
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:\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一样,监听器日志能够帮助我们解决很多日常故障问题。
Oracle 监听器日志解析的更多相关文章
- Oracle 监听器日志文件过大导致监听异常
Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...
- Oracle 监听器日志配置与管理
十一假期间,某客户因为监听日志问题导致系统登录挂起,当时在返京的路上,因客户业务不允许中断,无奈之下,借了个本子帮客户做了紧急处理,今天恰好有空,在网上搜了下有关监听日志的内容,发现一个不错的帖子,内 ...
- oracle 报警日志详解
oracle报警日志是一个非常重要的日志,其有两种实现方法: 1.通过全局表来实现,这种方法有一种缺点,就是在关闭数据库后或者数据库宕机后就不能在使用了 2.通过外部表来实现,这种方法避免了方法一种的 ...
- Oracle 监听器
Oracle监听器listener是一个重要的数据库服务器组件,在整个Oracle体系结构中,扮演着重要的作用. 监听器Lisener功能 从当前的Oracle版本看,Listener主要负责下面的几 ...
- Linux/Unix shell 监控Oracle监听器(monitor listener)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- Linux/Unix shell 监控Oracle告警日志(monitor alter log file)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- oracle监听器初识-配置多SERVICE_NAMES
现象: 为数据库设置多个服务名(通过SCOPE=both设置,同时修改参数文件) SQL> show parameter service_names; NAME TYPE VALUE ----- ...
- 转 Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案
今早刚上班.客户打电话过来说系统访问不了,输入用户名.用户号不能加载出来!听到这个问题,第一时间想到的是不是服务器重新启动了,Oracle数据库的相关服务没有启动的原因.查看服务的时候,发现相关的服务 ...
- 转载:阿里canal实现mysql binlog日志解析同步redis
from: http://www.cnblogs.com/duanxz/p/5062833.html 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数 ...
随机推荐
- python开发学习(元组、字符串、列表、字典深入)
https://www.cnblogs.com/songqingbo/p/5129116.html(转载学习)
- Struts2学习:Action使用@Autowired注入为null的解决方案
1.pom.xml引入struts2-spring-plugin <dependency> <groupId>org.apache.struts</groupId> ...
- Celery 在Windows下启动worker时出现错误:ValueError: not enough values to unpack (expected 3, got 0)
在公司Linux环境下没有出现问题,在回到家后直接在Windows10下运行出现错误: ValueError: not enough values to unpack (expected 3, got ...
- Xcode 如何导入IOS项目
前言:基于mac上如何导入ios项目的文章,手机自动化项目需要进行手机元素定位,前提是导入IOS项目 1.安装Xcode 到官网下载mac版Xcode:当前使用版本Version 7.3.1 http ...
- python-对象方法、静态方法、类方法
#-*- coding:utf-8 -*- #本次学习:对象方法.静态方法.类方法 class SeniorTestingEngineer: #属性--只能对象来调用self.salary work_ ...
- linux获取内存、cpu、负载、网口流量、磁盘信息
内存信息 / meminfo 返回dict #!/usr/bin/env python def memory_stat(): mem = {} f = open("/proc ...
- PL/SQL将sql脚本数据导入Oracle
PL/SQL将sql脚本数据导入数据库: 1.首先,使用plsql登录到需要导入数据的数据库.在[tools]--[Import tables] 2.选择第二个[SQL Inserts],在下面,点击 ...
- JavaScript进行简单的随即验证码生成(适合和我一样刚入门一本完整的教材书都没看完的弟弟)
(感谢橙旭园给我打开了前端世界的大门) var checkcode = document.getElementById("code"); var btn = document.ge ...
- js五子棋游戏
//code <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- 如何在notepad++实现代码自动化排版(调用Astyle)
我先介绍这个怎么在notepad++中调用原版的astyle的方法. 在notepad++:运行或是F5, 在输入框中选择astyle.exe所在的目录,什么你没有astyle,下载地址https:/ ...