天天看点

Oracle监听器的静态注册与动态注册区别

在运行lsnrctl命令的status时,常会看到如下返回值:

服务“test”包含1个例程。    例程"mydata",状态 UNKOWN,包含此服务的一个处理程序。。。 服务"a"包含1个例程。    例程"mydata",状态 READY,包含此服务的一个处理程序。。。

这里的,状态UNKOWN即表明为静态注册(手动填写参数);

状态为READY的记录,表明为动态注册(listener.ora参数由PMON进程自动从参数文件获取);

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

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

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

lsnrctl中显示如下

服务“test”包含1个例程。    例程“mydata”,状态UNKOWN,包含此服务的一个处理程序。。。

test即从监听配置过程,数据库服务中的“全局数据库名”读到的值(即配置文件中GLOBAL_DBNAME的值),“mydata”是从监听配置中,数据库服务中SID读到的值(即SID_NAME的值)。

SID_LIST_LISTENER =  (SID_LIST =     (SID_DESC =       (GLOBAL_DBNAME = test )       (ORACLE_HOME = /orahome/oracle/product/10.2.0/db_1)       (SID_NAME = mydata )     )   )

客户端在配置tnsname时,服务名(SERVICE_NAME)即为test。否则,连接不到数据库。

ABC =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.23)(PORT = 1521))     )     (CONNECT_DATA =       (SERVICE_NAME =

test )     )   )

这里的ABC,为服务命名。可以为任意值,在客户端连接服务器时,填写的主机字符串,即为此服务命名ABC。

二、动态注册

1、缺省的动态注册

pmon在数据库启动到mount或open时,动态从参数文件中读取service_names值。service_names可以为多个值。

service_names缺省为dbca建立数据库时的全局数据库名。

设置参数service_names为'a,b,c',命令如下:

alter system set service_names='a,b,c';

则:

lsnrctl状态如下:

服务“test”包含1个例程。    例程"mydata",状态 UNKOWN,包含此服务的一个处理程序。。。 服务"a"包含1个例程。    例程"mydata",状态 READY,包含此服务的一个处理程序。。。 服务"b"包含1个例程。    例程"mydata",状态 READY,包含此服务的一个处理程序。。。 服务"c"包含1个例程。    例程"mydata",状态 READY,包含此服务的一个处理程序。。。 服务 "mydata.ccddt.cn" 包含一个例程。    例程"mydata",状态 READY, 包含此服务的一个处理程序。。。

以上服务名a, b, c, mydata.ccddt.cn都为READY,为动态注册。

这里多了最后一条"mydata.ccddt.cn",是PMON缺省动态注册到监听器内的。

注意:不管参数service_names为何值,pmon都会自动以全局数据库名(这里为mydata.ccddt.cn)为服务名,动态注册一个监听。

缺省情况下,若启用动态注册监听,端口号必须为1521。若启用其他端口的动态监听注册,必须要做相关配置。

通过查看v$session,状态为SYS$USERS的连接为通过静态注册监听连接到服务器。

2、自定义端口的动态监听注册

若要启用非默认端口1521的动态监听注册,缺省状态,Oracle不会进行动态注册。要启用动态注册,必须设置local_listener参数。并在服务端配置tnsnames.ora指定监听参数,或者直接通过修改local_listener指定监听参数。步骤如下:

1)服务端

netmgr,配置监听程序,监听端口为1525(非默认端口)

Oracle监听器的静态注册与动态注册区别

保存配置

        2)、指定监听参数      (1)法1:直接通过修改local_listener参数指定

     SQL> alter system set LOCAL_LISTENER=' (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525))';

     System altered

   SQL> alter system register

   System altered              (2)法2: 在Oracle服务器端建立$ORACLE_HOME/network/admin/tnsnames.ora。解析文件,位置并填入如下内容

mytest = (DESCRIPTION =

    (ADDRESS_LIST =

        (ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.1.23)(PORT = 1525))

    )

)

这里的mytest也可以根据自己需要,修改为其他字符串。如a或b等。 设置参数,指定通过tnsnames.ora内的信息指定监听参数 SQL> alter system set local_listener=mytest;

System altered SQL> alter system register;

3、查看监听器状态

LSNRCTL> status

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date                15-MAR-2011 10:43:47

Uptime                    0 days 0 hr. 0 min. 56 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /orahome/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /orahome/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oraserver)(PORT=1525)))

Services Summary...

Service "a" has 1 instance(s).

  Instance "mydata", status READY, has 1 handler(s) for this service...

Service "b" has 1 instance(s).

  Instance "mydata", status READY, has 1 handler(s) for this service...

Service "c" has 1 instance(s).

  Instance "mydata", status READY, has 1 handler(s) for this service...

Service "mydata" has 1 instance(s).

  Instance "mydata", status READY, has 1 handler(s) for this service...

Service "mydataXDB" has 1 instance(s).

  Instance "mydata", status READY, has 1 handler(s) for this service...

Service "mydata_XPT" has 1 instance(s).

  Instance "mydata", status READY, has 1 handler(s) for this service...

The command completed successfully

Oracle监听器的静态注册与动态注册区别

1.jpg

静态注册:通过解析listene.ora文件

动态注册:由PMON进程动态注册至监听中

在没有listener.ora配置文件的情况下,如果启动监听,则监听为动态注册。用图形化netca创建的监听,默认也为动态注册

1.静态注册

listener.ora文件,监听的配置文件,静态注册读取该文件,动态注册,不必要

可以通过netca工具创建,也可以手动编辑。典型的listener.ora文件内容:

LISTENER_PHAMR =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = phamrdb1-vip)(PORT = 1521))

  )

SID_LIST_LISTENER_PHALR =

  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = phalr)
      (ORACLE_HOME = /oracle/product/11.2.0)
      (SID_NAME = phalr)
    )
  )

listener.ora文件两大模块:

LISTENER模块:监听名字、连接协议、监听主机、监听端口等基本配置信息

SID_LIST_LISTENER模块:配置监听的静态注册特性,包含数据库服务名、ORACLE_HOME、实例名等信息。

注意:SID_NAME,就是数据库实例名,在Linux环境大小写敏感

GLOBAL_DBNAME就是数据库服务名,可以省略,默认和SID_NAME保持一致,也可以不一致。

ORACLE_HOME,默认和$ORACLE_HOME环境变量保持一致。Windows,该参数无效,取自注册表。

静态注册,监听不知道实例的具体状态,所以监听启动之初查看实例信息,其状态信息显示为UNKNOWN.例如:

[email protected]: /home/oracle> lsnrctl status LISTENER_PHAMR

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 17-NOV-2016 17:17:37

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=phamrdb1-vip)(PORT=1521)))

STATUS of the LISTENER
------------------------
Alias                     LISTENER_PHAMR
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                01-OCT-2016 14:12:51
Uptime                    47 days 3 hr. 4 min. 45 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/product/11.2.0/network/admin/listener.ora
Listener Log File         /oracle/diag/tnslsnr/phamrdb1/listener_phamr/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.178.1.64)(PORT=1521)))
Services Summary...
Service "phamr" has 1 instance(s).     监听状态中的服务名
  Instance "phamr", status UNKNOWN, has 1 handler(s) for this service...  监听状态中的实例名
The command completed successfully

2,动态注册

在动态注册监听的环境中,listener.ora文件可以不包括当前数据库的实例信息,所以这个文件不必要。

实例启动时,会由Oracle PMON进程将数据库实例信息动态注册至监听上。

当Oracle实例关闭时,会再次由PMON进程自动从监听里面撤销当前实例信息。

所以,要实现动态注册,数据库的实例至少要处于nomount状态

监听动态注册时的实例状态:来自PMON进程动态注册时的实例状态,一般有3种状态:READY、BLOCKED和RESTRICED

READY:表示数据库实例已经处于mount或者open状态,可以接受客户端连接

BLOCKED:表示数据库实例还处于nomount状态或者该实例类型为ASM实例,不接受客户端连接,如果这时候客户端去连

               接数据库会报ora-12528错误

RESTRICED:表示数据库处于RESTRICED模式,不接受普通权限的远程客户端连接,如果这时候客户端去连接数据库会报

                  ora-12526错误

oracle@fsdata: /oracle/product/11.2.0/network/admin> lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 17-NOV-2016 16:01:43

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                17-NOV-2016 15:57:23
Uptime                    0 days 0 hr. 4 min. 19 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /oracle/diag/tnslsnr/fsdata/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=fsdata)(PORT=1521)))
Services Summary...
Service "FSDATA" has 1 instance(s).
  Instance "FSDATA", status READY, has 1 handler(s) for this service...
Service "FSDATAXDB" has 1 instance(s).
  Instance "FSDATA", status READY, has 1 handler(s) for this service...
The command completed successfully

oracle@fsdata: /oracle/product/11.2.0/network/admin> lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 17-NOV-2016 15:58:47

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                17-NOV-2016 15:57:23
Uptime                    0 days 0 hr. 1 min. 23 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /oracle/diag/tnslsnr/fsdata/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=fsdata)(PORT=1521)))
Services Summary...
Service "FSDATA" has 1 instance(s).
  Instance "FSDATA", status BLOCKED, has 1 handler(s) for this service...
The command completed successfully

实例既可以动态注册,同时静态注册,状态分别显示为READY和UNKNOWN

oracle@fsdata: /oracle/product/11.2.0/network/admin> lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 17-NOV-2016 17:50:14

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=fsdata)(PORT=1521)))

STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                17-NOV-2016 15:57:23
Uptime                    0 days 1 hr. 52 min. 50 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/product/11.2.0/network/admin/listener.ora
Listener Log File         /oracle/diag/tnslsnr/fsdata/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=fsdata)(PORT=1521)))
Services Summary...
Service "FSDATA" has 2 instance(s).
  Instance "FSDATA", status UNKNOWN, has 1 handler(s) for this service...
  Instance "FSDATA", status READY, has 1 handler(s) for this service...
Service "FSDATAXDB" has 1 instance(s).
  Instance "FSDATA", status READY, has 1 handler(s) for this service...
The command completed successfully

3.监听的常用命令

lsnrctl start [listener_name]

lsnrctl stop [listener_name]

lsnrctl status [listener_name]

lsnrctl service [listener_name]

lsnrctl reload [listener_name]

4.监听的别名

监听默认名字是LISTENER,可以配置别名

[email protected]: /dump> ps -ef | grep tnslsnr | grep  -v grep

oracle   29598     1  0 15:57 ?        00:00:00 /oracle/product/11.2.0/bin/tnslsnr LISTENER -inherit

oracle@phamrdb1: /home/oracle> ps -ef | grep tnslsnr| grep -v grep

oracle   38300     1  0 Oct01 ?        06:21:54 /oracle/product/11.2.0/bin/tnslsnr LISTENER_PHAMR –inherit

继续阅读