Oracle监听器相关知识(1)

本文大部分为转载。
原文作者1:realkid4,原文地址:链接
原文作者2:chyinzi,原文地址:链接

1,监听器的作用

Oracle监听器(listener)是一个重要的数据库服务器组件,在整个Oracle体系结构中,扮演着重要的作用。

监听器Lisener功能

从当前的Oracle版本看,Listener主要负责下面的几方面功能:

  1. 监听客户端请求
    监听器运行在数据库服务器之上,与Oracle实例(可为多个)相关关联,是一个专门的进程process,在Windows的服务项目或者Linux的运行进程列表中,都会看到对应的运行进程。
    Windows上进程名为TNSLSNR,Linux/Unix平台上是lsnrctl。
    监听器在服务器指定端口(默认端口1521)监听客户端的请求。

  2. 为客户端请求分配Server Process
    监听器只负责接听请求,之后将请求转接给Oracle Server Process。
    监听器接收到请求之后,就向操作系统(或者Dispatcher组件)要求Fork或分配一个Server Process与客户端相连。
    在Oracle的服务模式下,客户端进程是不允许直接操作数据库实例和数据,而是通过一个服务进程Server Process(也称为影子进程)作为代理。

  3. 注册实例服务
    本质上讲,Listener是建立实例和客户端进程之间联系的桥梁。Listener与实例之间的联系,就是通过注册的过程来实现的。注册的过程就是实例告诉监听器,它的数据库数据库实例名称instance_name和服务名service_names。
    在监听器注册好信息,就能根据客户端请求查找监听注册信息,找到正确的服务实例名称。
    目前Oracle版本中,提供动态注册和静态注册两种方式。

  4. 错误转移failover
    Failover是RAC容错的一个重要方面功能,其功能是在数据库实例崩溃的时候,可以自动将请求转移到其他可用实例上的一种功能。
    在这个过程中,发现实例已经崩溃,并且将请求转移到其他实例上,就属于Listener的功能。

  5. 负载均衡衡量
    在RAC架构中,Oracle实现了负载均衡。当一个客户请求到来时,Oracle会根据当前RAC集群环境中所有实例的负载情况,避开负载较高的实例,将请求转移到负载较低的实例进行处理。
    在早期RAC版本中,负载轻重的衡量是根据监听器当前维护连接数目来确定的,而不是实时查看多实例的负载。
    RAC环境中的监听器之间进行沟通通信。

2,监听器的动/静态注册

  • 静态注册,顾名思义,就是显式的指定监听器程序要为哪个数据库例程做监听,以及监听该例程时使用的服务名。
    静态注册情况下,监听程序不知道所监听例程服务是否存在。

  • 动态注册,是与静态注册相对应的一种注册方法,不需要指定instance_name和service_name,而是在数据库例程启动时,通过例程的后台进程PMON定期向监听器注册服务。
    动态注册情况下,监听程序知道例程服务的状态。


那么,如何区分数据库是动态注册还是静态注册呢?

  1. 使用lsnrctl的status命令
    在运行lsnrctl的status命令时,会看到如下返回值:
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
启动日期                   07-11月-2017 13:24:32
正常运行时间                0 天 0 小时 51 分 31 秒
跟踪级别                   off
安全性                     ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件            C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件            c:\app\administrator\diag\tnslsnr\class11g\listener\alert\log.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=class11g)(PORT=1521)))
服务摘要..
……
服务 "ora11g" 包含 1 个实例。
  实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...
服务 "sales" 包含 1 个实例。
  实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
……
命令执行成功

根据返回状态可以判断数据库的注册方式

  • 状态UNKOWN即表明为静态注册(手动填写参数)
  • 状态为READY的记录,表明为动态注册(listener.ora参数由PMON进程自动从参数文件获取)
  1. 使用Oracle自带的图形化管理工具Net Manager

静态注册

监听配置中,数据库服务中的全局数据库名,可以写任意内容,与数据库无关,只要保证SID正确即可连上数据库。

由于静态注册,参数是手动静态添加,与数据库无关。数据库无法确认监听是否正确配置。因此,lsnrctl中的status显示状态为unkown。即不保证能连通数据库。

注意:静态注册监听,客户端在配置tnsnames.ora服务命名时,“(Oracle 8i或更高版本)服务名”里填写内容要与服务端静态注册监听器时的全局数据库名(即GLOBAL_DBNAME)一致。否则,无法连通。

配置静态监听前,lsnrctl中status显示如下

服务摘要..
……
服务 "ora11g" 包含 1 个实例。
  实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...
服务 "sales" 包含 1 个实例。
  实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
……

对配置文件listener.ora修改如下

SID_LIST_LISTENER =
  (SID_LIST =
    ……
    (SID_DESC =
      (GLOBAL_DBNAME = Example_1)
      (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
      (SID_NAME = sales)
    )
  )

其中,Example_1是监听配置时,数据库服务中的“全局数据库名”的值(即配置文件中GLOBAL_DBNAME的值),“sales”是监听配置中,数据库服务中SID读到的值(即SID_NAME的值)。

同时,客户端需要正确配置tnsname.ora文件,服务名(SERVICE_NAME)需要与服务器配置中的GLOBAL_DBNAME一致,例如上文的Example_1。否则,将连接不到数据库。

客户端tnsname.ora文件中相应的配置见下方

Example_1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = class11g)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sales)
    )
  )

ORA11G =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = class11g)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )

这里的Example_1,为服务名,可以设置为任意值,只要在客户端连接服务器时。

此时,服务器端使用lsnrctl的status命令,显示如下

服务 "Example_1" 包含 1 个实例。
  实例 "sales", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ora11g" 包含 1 个实例。
  实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...

在客户端使用sqlplus登录,成功,显示如下

C:\Documents and Settings\Administrator>sqlplus scott/tiger@example_1

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 7 17:43:54 2017

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SCOTT@example_1>
动态注册

仍然使用上面的例子。
可以注意到,在Example_1例程之外,还有一个数据库服务ora11g并没有在监听器配置文件中设置,但可以如Example_1一样正常使用。

再看一下上面服务器端使用lsnrctl的status命令,显示如下

服务 "Example_1" 包含 1 个实例。
  实例 "sales", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ora11g" 包含 1 个实例。
  实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...

再次展示listener.ora的配置相关部分如下

SID_LIST_LISTENER =
  (SID_LIST =
    ……
    (SID_DESC =
      (GLOBAL_DBNAME = Example_1)
      (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
      (SID_NAME = sales)
    )
  )

在客户端使用sqlplus登录,成功,显示如下

C:\Documents and Settings\Administrator>sqlplus scott/tiger@ora11g

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 11月 7 17:59:20 2017

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SCOTT@ora11g>

可见,这里的ora11g就是动态注册。

  1. 可以看到,在上面listener.ora的配置中,并没有ora11g的静态注册信息,而且在lsnrctl的status命令中,ora11g的状态为Ready。
  2. 通过Oracle自带的管理工具Net Manager能看到,在数据库服务中,仅注册了sales,并没有注册ora11g(见下图)


    net manager.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容