您好,欢迎访问一九零五行业门户网

浅谈 Oracle 监听器

oracle 监听器 listener 是一个重要的数据库服务器组件,在整个 oracle 体系结构中,扮演着重要的作用。它负责管理 oracle 数据库
oracle 监听器 listener 是一个重要的数据库服务器组件,在整个 oracle 体系结构中,扮演着重要的作用。它负责管理 oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是tcp 1521端口)上监听连接请求,并将连接转发给数据库,下面的部分,会从几个方面对监听器进行简单介绍。
1.监听器的功能从当前的 oracle 版本看,listener 主要负责下面的几方面功能:
监听客户端请求。监听器运行在数据库服务器之上,与 oracle 实例(可为多个)相关关联,是一个专门的进程 process,在 windows 的服务项目或者 linux 的运行进程列表中,都会看到对应的运行进程。windows 上名为 tnslsnr,linux/unix 平台上是 lsnrctl。监听器守候在服务器制定端口(默认为:1521),监听客户端的请求。 为客户端请求分配 server process。监听器只负责接听请求,之后将请求转接给 oracle server process。在 oracle 的服务模式下,客户端进程是不允许直接操作数据库实例和数据,而是通过一个服务进程 server process(也称为影子进程)作为代理。监听器接受到请求之后,就向操作系统(或者 dispatcher 组件)要求 fork(或分配)一个 server process 与客户端相连。 注册实例服务。本质上讲,listener 是建立实例和客户端进程之间联系的桥梁。listener 与实例之间的联系,就是通过注册的过程来实现的。注册的过程就是实例告诉监听器,它的数据库数据库实例名称 instance_name 和服务名 service_names。监听器注册上这样的信息,对客户端请求根据监听注册信息,找到正确的服务实例名称。目前 oracle 版本中,提供动态注册和静态注册两种方式。 错误转移 failover。failover 是 rac 容错的一个重要方面功能,其功能是在数据库实例崩溃的时候,可以自动将请求转移到其他可用实例上的一种功能。可以提供很大程度上的可用性(availability)功能。这个过程中,发现实例已经崩溃,并且将请求转移到其他实例上,就属于是 listener 的功能。 负载均衡衡量。在 rac 架构中,oracle 实现了负载均衡。当一个客户请求到来时,oracle 会根据当前 rac 集群环境中所有实例的负载情况,避开负载较高的实例,将请求转移到负载较低的实例进行处理。在早期 rac 版本中,负载轻重的衡量是根据监听器当前维护连接数目来确定的,而不是实时查看多实例的负载。rac 环境中的监听器之间进行沟通通信。2.监听器的操作监听器在 windows 和 linux/unix 平台上,都是可以直接操作的。下面以 linux 平台操作为例,其他平台类似。
在命令行窗口(cmd),输入 lsnrctl,就可以进入监听器控制窗口。
[oracle@newtest ~]$ lsnrctl
lsnrctl for linux: version 10.2.0.4.0 – production on 06-apr-2011 14:31:46
copyright (c) 1991, 2007, oracle.  all rights reserved.
welcome to lsnrctl, type “help” for information.
lsnrctl>
通过输入命令 help,可以查看支持的监听器操作。下面仅介绍常用的几个:
查看当前监听器状态:
敲入 status,可以查看当前监听器的状态,对应操作日志信息和服务注册信息等内容。如下:
lsnrctl> status
connecting to (description=(address=(protocol=tcp)(host=127.0.0.1)(port=1521)))
status of the listener
————————
alias listener
version tnslsnr for linux: version 10.2.0.4.0 – production
start date 18-mar-2011 18:03:56
uptime 18 days 20 hr. 28 min. 37 sec
trace level off
security on: local os authentication
snmp off
listener parameter file /home/oracle/product/10.2.0/db_1/network/admin/listener.ora
listener log file /home/oracle/product/10.2.0/db_1/network/log/listener.log
listening endpoints summary…
(description=(address=(protocol=tcp)(host=127.0.0.1)(port=1521)))
services summary…
service “test” has 2 instance(s).
instance “test”, status unknown, has 1 handler(s) for this service…
instance “test”, status ready, has 1 handler(s) for this service…
service “testxdb” has 1 instance(s).
instance “test”, status ready, has 1 handler(s) for this service…
service “test_xpt” has 1 instance(s).
instance “test”, status ready, has 1 handler(s) for this service…
the command completed successfully
lsnrctl>
需要额外注意的下面几项内容。
监听程序参数文件 /home/oracle/product/10.2.0/db_1/network/admin/listener.ora  //使用的参数
监听器启动时依据参数文件的,当然没有参数文件监听器也是可以启动,那时监听器依据默认的行为操作。这个参数指定了监听器参数文件的位置,listener.ora。这个文件是一个文本类型参数文件,描述了监听器监听端口,主机名称和静态注册信息。listener.ora是随着数据库实例的建立之后,建立监听器的过程中动态配置的。
监听程序日志文件 /home/oracle/product/10.2.0/db_1/network/log/listener.log //操作日志位置
监听器日志,是一个记录和描述监听器工作和错误的信息库。通过仔细研究日志内容,可以帮助我们发现当前的监听器的问题、解决连接故障和深入理解监听器工作原理。
上文中已经说明,监听器有注册功能,通过 status 命令(services命令同样效果)。可以查看到当前有什么服务被注册上,用来检查连接服务失败,,是常用的工具。
其它类似信息

推荐信息