Oracle中 lsnrctl命令使用总结_oracle_脚本之家

Oracle监听服务lsnrctl参数及查询状态详明,常用参数。

正文大多数为转发。

正文当先59%为转发。
原稿小编1:realkid4,原来的书文地址:链接
原来的书文作者2:chyinzi,原来的作品地址:链接

在指令行中先输入lsnrctl,步向以下页面

初藳笔者1:realkid4,原版的书文地址:链接
原稿小编2:chyinzi,原来的书文地址:链接

1,监听器的效劳

Oracle监听器(listener)是叁个重要的数据库服务器组件,在全部Oracle种类结构中,扮演注重要的意义。

监听器Lisener功能

从当下的Oracle版本看,Listener首要承受上面的几上面效果:

  1. 监听顾客端央求
    监听器运营在数据库服务器之上,与Oracle实例(可为七个)相关涉嫌,是一个特意的进程process,在Windows的服务项目只怕Linux的运维进度列表中,都会见到相应的运作进度。
    Windows上经过名称为TNSLSNLacrosse,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情形中的监听器之间张开沟通通讯。

展现监听器的状态。命令显示监听器是或不是运动的,日志与跟踪文件的地方,监听器已经不仅运维了多久,以至监听器所监听的职责。

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,能够查看援救的监听器操作命令。上面介绍常用的多少个。

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

历数监听器的劳务音讯。

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 个处理程序...
  //当前已经在监听器中注册的服务名称和实例名称
命令执行成功
静态注册

监听配置中,数据库服务中的全局数据库名,能够写自便内容,与数据库非亲非故,只要保障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文件,服务名(SE科雷傲VICE_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>

展现oracle软件与协商适配器的版本。

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 个处理程序...
命令执行成功
动态注册

照例采用方面包车型大巴事例。
能够小心到,在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(见下图)
![](https://upload-images.jianshu.io/upload_images/8830608-fd2e52d1fc5c380d.jpg)

net manager.jpg