Oracle学习——OracleListener我爱编程

Oracle监听器相关知识(2)

2017-11-09  本文已影响40人  千幻流光

本文大部分为转载。

原文作者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与监听器的连接,实际上就是相互信息的交换。Server Process将自身在OS中的进程编号、连接地址信息发给监听器。监听器将客户端信息传递给Server Process。

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读