Oracle监听器相关知识(2)

本文大部分为转载。

原文作者1:realkid4,原文地址:链接
原文作者2:chyinzi,原文地址:链接

1,lsnrctl的使用

监听器在Windows和Linux/Unix平台上,都可以直接操作。
下面将以Windows平台操作为例,Linux/Unix平台的操作类似。

在命令行窗口(CMD),输入lsnrctl,就可以进入监听器控制窗口。

C:\Documents and Settings\Administrator>lsnrctl 

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 26-12月-2010 21:53:04 

Copyright (c) 1991, 2005, Oracle.  All rights reserved. 

欢迎来到LSNRCTL, 请键入"help"以获得信息。 

LSNRCTL>

通过输入命令help,可以查看支持的监听器操作命令。下面介绍常用的几个。

a,status

功能:查看当前监听器状态

LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 
  //连接监听器的名称和信息:主机名+监听端口号
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
  //Listener版本信息,在一台机器多实例的情况下,很重要!因为版本对应向下兼容
启动日期                   08-11月-2017 13:47:21
正常运行时间                0 天 0 小时 4 分 32 秒
跟踪级别                   off
安全性                     ON: Local OS Authentication
  //监听器一般有操作系统验证和密码验证两种安全验证方式。
  //这里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)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
  //监听器监听的服务器和端口信息
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "Example_1" 包含 1 个实例。
  实例 "sales", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "a" 包含 1 个实例。
  实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
服务 "b" 包含 1 个实例。
  实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ora11g" 包含 1 个实例。
  实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ora11gXDB" 包含 1 个实例。
  实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...
服务 "sales" 包含 1 个实例。
  实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
服务 "salesXDB" 包含 1 个实例。
  实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
  //当前已经在监听器中注册的服务名称和实例名称
命令执行成功
b,start/stop

功能:开启/关闭监听器

监听器的行为受到参数文件listener.ora的控制。该文件是一个文本文件。

Oracle对于文本类型的参数文件,大多数情况下是不支持热加载的。例如数据库的Pfile和listener.ora都是如此。因此,当我们调整了监听器的参数,通常会先停止监听器,再开启监听器,这样监听器就会重新读取参数文件并按照新的参数运行。

调整监听参数的有两种途径,可以通过Oracle提供的GUI界面完成,也可以通过手工修改listener.ora来完成。

使用界面GUI,就是使用Net Configuration Assistant来配置。配置完成后,配置程序会自动重新启动监听器程序,来加载修改的参数文件。如果采用手工修改listener.ora,就必须要手工的进行监听程序关闭和启动。

使用GUI可以满足大部分的情况,而且可以避免拼写错误引发的监听器故障(监听器不会检查配置项目的正确与否)。但是,在一些比较复杂的情况下,比如一台机器绑定多个IP的情况,或者RAC的复杂功能配置上,还是更多使用手工编写listener.ora的方法。

start命令执行后,会自动运行一次status命令,命令执行结果如下

LSNRCTL> stop
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令执行成功
LSNRCTL> start
启动tnslsnr: 请稍候...

TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
系统参数文件为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)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
启动日期                   09-11月-2017 10:55:31
正常运行时间                0 天 0 小时 0 分 3 秒
跟踪级别                   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)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "Example_1" 包含 1 个实例。
  实例 "sales", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
c,reload

功能:重新加载配置文件,类似于重启监听器
lsnrctl提供了reload命令,可以在listener启动的情况下,重新加载参数文件和SID信息。

reload命令执行结果如下

LSNRCTL> reload
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令执行成功
d,其他命令

通过help可以看到lsnrctl提供的其他功能命令

LSNRCTL> help
以下操作可用
星号 (*) 表示修改符或扩展命令:

start               stop                status
services            version             reload
save_config         trace               change_password
quit                exit                set*
show*

各个命令的功能简述如下:

start - Start the Oracle listener
stop - Stop the Oracle listener
status - Display the current status of the Oracle listener
services - Retrieve the listener services information
version - Display the oracle listener version information
reload - This will reload the oracle listener SID and parameter files. This is equivalent to lsnrctl stop and lsnrctl start.
save_config - This will save the current settings to the listener.ora file and also take a backup of the listener.ora file before overwriting it. If there are no changes, it will display the message “No changes to save for LISTENER”
trace - Enable the tracing at the listener level. The available options are ‘trace OFF’, ‘trace USER’, ‘trace ADMIN’ or ‘trace SUPPORT’
spawn - Spawns a new with the program with the spawn_alias mentioned in the listener.ora file
change_password - Set the new password to the oracle listener (or) change the existing listener password.
show - Display log files and other relevant listener information.

set选项

LSNRCTL> set
 set之后提供了以下操作
星号 (*) 表示修改符或扩展命令:

password                           rawmode
displaymode                        trc_file
trc_directory                      trc_level
log_file                           log_directory
log_status                         current_listener
inbound_connect_timeout            startup_waittime
save_config_on_stop                dynamic_registration
enable_global_dynamic_endpoint

show选项

LSNRCTL> show
 show之后提供了以下操作
星号 (*) 表示修改符或扩展命令:

rawmode                            displaymode
rules                              trc_file
trc_directory                      trc_level
log_file                           log_directory
log_status                         current_listener
inbound_connect_timeout            startup_waittime
snmp_visible                       save_config_on_stop
dynamic_registration               enable_global_dynamic_endpoint
oracle_home                        pid

2,监听器工作过程

一般监听器作为一个独立process在操作系统中运行,监听在特定网络端口(默认为:1521),等待客户端请求的到来。注意:我们在客户端配置命名服务的时候,输入的1521也就是为了与监听器程序建立连接。

当一个请求“如期而至”,监听器对照已经注册的服务列表,查找对应的数据库实例信息,获取到指定实例的ORACLE_HOME路径。相当于表明可以进行连接。

客户端与实例的交互不是直接的,是通过Server Process作为代理中介来实现的。所有指令SQL都是客户端通过Server Process发送到实例中,这种体系结构是Oracle对于实例和数据库文件一种保护机制。

当监听器获得请求之后,要从Oracle实例中分配一个Server Process与之对应。这里不同的Oracle连接方式存在一些差别。

  • 如果是专用连接模式,也就是一个客户端连接对应一个Server Process。监听器就会向OS请求fork(创造)出一个Server Process,与监听器尝试交互。

  • 如果是共享连接模式,也就是多个客户端共享一个Server Process(注意:这里还不是连接池)。监听器就会向Dispatcher进程(管理共享模式连接的进程)请求一个Server Process与之交互。

Server Process与监听器的连接,实际上就是相互信息的交换。Server Process将自身在OS中的进程编号、连接地址信息发给监听器。监听器将客户端信息传递给Server Process。

监听器获取到Server Process的信息之后,将其返回给客户端连接程序。客户端获取到信息之后,进行重连接,根据返回的信息与Server Process在制定的服务器端口进行联系。

直到这个时候,客户端程序才将连接用户名、密码等信息发给Server Process,进行登录验证等操作。监听器的工作也就到此结束。

这里面有一个技术细节,就是Server Process与客户端连接的时候,是允许不使用1521端口的。具体连接的端口,是带有随机因素的。在9i版本Windows平台下,如果安装了防火墙并设置只允许1521端口通信,会带来一些连接问题。好在在其他平台上和之后的版本中,实现了一种端口共享技术,连接可以和监听器一起使用1521端口。

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

推荐阅读更多精彩内容