您当前的位置:首页 > oracle

实现Oracle非1521标准端口动态注册

动态注册dynamic registry和静态注册是实例和监听器之间建立联系的重要方式。从现在趋势看,默认监听器+动态注册已经成为默认Oracle标准配置。在一些场景下,处于安全的原因可能需要修改标准监听配置和注册方式。本篇主要介绍如何实现非1521端口进行动态注册方法。32blinux系统宝典

1、默认监听与1521端口32blinux系统宝典

Oracle Net Service核心三个配置文件:listener.ora、tnsnames.ora和sqlnet.ora。其中,listener.ora文件为监听器相关信息的配置文件。关于监听器个性化参数内容,均在该文件中设置。32blinux系统宝典

在默认安装情况下,我们一般在$ORACLE_HOME/network/admin目录中是可以没有listener.ora文件的。32blinux系统宝典

[oracle@aaalife admin]$ ls -l32blinux系统宝典

-rw-r-----. 1 oracle oinstall  332 Aug  7 01:44 tnsnames.ora32blinux系统宝典

此时,Oracle会在1521默认端口,支持一个默认配置文件的监听器程序。并且,该程序支持动态注册功能。32blinux系统宝典

[oracle@aaalife admin]$ lsnrctl start32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 01:08:1032blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...32blinux系统宝典

TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Log messages written to /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))32blinux系统宝典

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    LISTENER32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 01:08:1032blinux系统宝典

Uptime                    0 days 0 hr. 0 min. 0 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

--此处没有说明监听器配置文件路径。32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))32blinux系统宝典

The listener supports no services32blinux系统宝典

The command completed successfully32blinux系统宝典

对注册行为另一端的Oracle实例而言,默认情况下Oracle实例会进行动态注册动作,会向1521端口监听的监听程序进行注册动作。32blinux系统宝典

[oracle@aaalife admin]$ lsnrctl status32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 01:14:5432blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    LISTENER32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 01:08:1032blinux系统宝典

Uptime                    0 days 0 hr. 6 min. 43 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))32blinux系统宝典

Services Summary...32blinux系统宝典

Service "aaadb" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

Service "aaadbXDB" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

The command completed successfully32blinux系统宝典

2、非默认端口监听器32blinux系统宝典

在一些安全需求场景下,我们会被要求修改监听端口到非1521端口,从而避免被扫描入侵。其实,这对于攻击扫描程序来讲,意义不大,因为一般黑客攻击都会扫描所有端口。32blinux系统宝典

如果我们需要修改端口号,就必须创建专门的listener.ora文件内容来进行配置。下面内容可以配置一个非标准监听器程序。32blinux系统宝典

[oracle@aaalife admin]$ cat listener.ora32blinux系统宝典

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

# Generated by Oracle configuration tools.32blinux系统宝典

MY_LISTENER =32blinux系统宝典

(DESCRIPTION_LIST =32blinux系统宝典

(DESCRIPTION =32blinux系统宝典

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1531))32blinux系统宝典

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1531))32blinux系统宝典

)32blinux系统宝典

)32blinux系统宝典

ADR_BASE_LISTENER = /u01/app/oracle32blinux系统宝典

配置文件中,包括一个1531端口的监听程序。下面查看监听器情况。32blinux系统宝典

[oracle@aaalife admin]$ lsnrctl start32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 01:27:5332blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...32blinux系统宝典

TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

Log messages written to /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))32blinux系统宝典

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    LISTENER32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 01:27:5332blinux系统宝典

Uptime                    0 days 0 hr. 0 min. 0 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

Listener Parameter File  /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))32blinux系统宝典

The listener supports no services32blinux系统宝典

The command completed successfully32blinux系统宝典

默认显示的还有1521端口监听程序。同时,发现其实当前服务器上是由两个监听器运行的。32blinux系统宝典

[oracle@aaalife admin]$ lsnrctl status listener32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 01:30:1332blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    LISTENER32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 01:27:5332blinux系统宝典

Uptime                    0 days 0 hr. 2 min. 19 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

Listener Parameter File  /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))32blinux系统宝典

Services Summary...32blinux系统宝典

Service "aaadb" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

Service "aaadbXDB" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

The command completed successfully32blinux系统宝典

[oracle@aaalife admin]$32blinux系统宝典

[oracle@aaalife admin]$ lsnrctl status my_listener32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 01:30:2932blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1531)))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    LISTENER32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 01:17:5232blinux系统宝典

Uptime                    0 days 0 hr. 12 min. 37 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

Listener Parameter File  /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1531)))32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1531)))32blinux系统宝典

The listener supports no services32blinux系统宝典

The command completed successfully32blinux系统宝典

上面信息显示出几个细节:32blinux系统宝典

ü  我们在listener.ora文件中配置了一个自定义监听器my_listener,监听1531端口。但是系统当前默认监听器依然存在,并且可运行,在1521端口。my_listener监听器运行在1531端口;32blinux系统宝典

ü  Oracle实例动态注册动作是在1521端口的监听程序上进行的,1531端口并没有被注册;32blinux系统宝典

默认监听器的问题好解决,只要我们只保留一个监听即可。那么,如何让Oracle实例在1531端口进行注册,不在1521端口进行注册呢?32blinux系统宝典

解决的方法就是使用local_listener配置参数。默认情况下,该参数为空。32blinux系统宝典

SQL> show parameter listener;32blinux系统宝典

NAME                                TYPE        VALUE32blinux系统宝典

------------------------------------ ----------- ------------------------------32blinux系统宝典

listener_networks                    string32blinux系统宝典

local_listener                      string32blinux系统宝典

remote_listener                      string32blinux系统宝典

该参数用于明确指定Oracle实例向哪一个监听器上进行注册动作。通常对于非标准端口注册,都需要将注册监听信息修改参数。32blinux系统宝典

SQL> show parameter local32blinux系统宝典

NAME                                TYPE        VALUE32blinux系统宝典

------------------------------------ ----------- ------------------------------32blinux系统宝典

local_listener    string      (ADDRESS_LIST=(Address=(Protoc                                                ol=tcp)(HOST=AAALIFE)(Port=1531)))32blinux系统宝典

log_archive_local_first              boolean    TRUE32blinux系统宝典

parallel_force_local                boolean    FALSE32blinux系统宝典

注意:该参数local_listener修改范围支持both方式,立即生效不需要重新启动实例。32blinux系统宝典

此时,监听器状态如下:32blinux系统宝典

[oracle@aaalife dbs]$ lsnrctl status32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 02:32:2532blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    LISTENER32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 01:27:5332blinux系统宝典

Uptime                    0 days 1 hr. 4 min. 32 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

Listener Parameter File  /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))32blinux系统宝典

The listener supports no services32blinux系统宝典

The command completed successfully32blinux系统宝典

[oracle@aaalife dbs]$ lsnrctl status my_listener32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 02:32:3332blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1531)))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    LISTENER32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 01:17:5232blinux系统宝典

Uptime                    0 days 1 hr. 14 min. 41 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

Listener Parameter File  /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1531)))32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1531)))32blinux系统宝典

Services Summary...32blinux系统宝典

Service "aaadb" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

Service "aaadbXDB" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

The command completed successfully32blinux系统宝典

实例向1531端口进行动态注册了,原有1521默认监听器没有注册信息。32blinux系统宝典

那么,还有一个问题,就是local_listener设置值。该值采用括号表达式进行书写,是Oracle Net Service内部使用的一种方式。从管理角度看,这种策略不是很好的方法。我们直接将端口编号书写在数据库参数中,不但容易泄露部署信息,而且在发生迁移、变更动作的时候,这种方式也会有一些问题。32blinux系统宝典

所以,Oracle官方支持监听器别名方法进行配置local_listener。32blinux系统宝典

3、设置监听器别名32blinux系统宝典

一个很有意思的现象是,在local_listener的配置问题上,MOS和网络同仁们的差异是很大的。MOS官方意见是将监听器别名设置上,而网络同仁们无一例外的选择“括号表达式”。32blinux系统宝典

笔者实验的情况是,直接设置监听器别名,Oracle是不认可的。32blinux系统宝典

SQL> alter system set local_listener='my_listener' scope=both;32blinux系统宝典

alter system set local_listener='my_listener' scope=both32blinux系统宝典

*32blinux系统宝典

ERROR at line 1:32blinux系统宝典

ORA-02097: parameter cannot be modified because specified value is invalid32blinux系统宝典

ORA-00119: invalid specification for system parameter LOCAL_LISTENER32blinux系统宝典

ORA-00132: syntax error or unresolved network name 'my_listener'32blinux系统宝典

Oracle不能解析my_listener名称,因为其既不是括号表达式,也不是设置的别名。这里面就比较奇怪,我们分明已经在listener.ora文件中定义了名称。32blinux系统宝典

对00132错误,Oracle官方的解释如下:32blinux系统宝典

[oracle@aaalife admin]$ oerr ora 0013232blinux系统宝典

00132, 00000, "syntax error or unresolved network name '%s'"32blinux系统宝典

// *Cause:  Listener address has syntax error or cannot be resolved.32blinux系统宝典

// *Action: If a network name is specified, check that it corresponds32blinux系统宝典

//          to an entry in TNSNAMES.ORA or other address repository32blinux系统宝典

//          as configured for your system. Make sure that the entry32blinux系统宝典

//          is syntactically correct.32blinux系统宝典

Oracle认为在服务器端的tnsnames.ora文件中,没有能够找到my_listener的对应名称。Tnsnames.ora是我们保存本地连接对应名称的地方,这里是否意味着说此处的别名,是一定在tnsnames.ora文件中进行定义。本地命名别名定义我们是熟悉的。监听器程序别名如何定义?32blinux系统宝典

经过查询Oracle早期文档和治疗,从一个角落找到定义格式和方法。32blinux系统宝典

[oracle@aaalife admin]$ cat tnsnames.ora# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora32blinux系统宝典

# Generated by Oracle configuration tools.32blinux系统宝典

MY_LISTENER=32blinux系统宝典

(description=32blinux系统宝典

(address=(protocol=tcp)(host=AAALIFE)(port=1531)))32blinux系统宝典

突发奇想,tnsping命令有解析格式的副作用。是否可以成功呢?32blinux系统宝典

[oracle@aaalife admin]$ tnsping my_listener32blinux系统宝典

TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 20:43:5832blinux系统宝典

Copyright (c) 1997, 2013, Oracle.  All rights reserved.32blinux系统宝典

Used parameter files:32blinux系统宝典

Used TNSNAMES adapter to resolve the alias32blinux系统宝典

Attempting to contact (description= (address=(protocol=tcp)(host=AAALIFE)(port=1531)))32blinux系统宝典

OK (0 msec)32blinux系统宝典

解析成功,起码格式上没有大的问题。32blinux系统宝典

SQL> alter system set local_listener='MY_LISTENER' scope=both;32blinux系统宝典

System altered.32blinux系统宝典

SQL> show parameter local;32blinux系统宝典

NAME                                TYPE        VALUE32blinux系统宝典

------------------------------------ ----------- ------------------------------32blinux系统宝典

local_listener                      string      MY_LISTENER32blinux系统宝典

log_archive_local_first              boolean    TRUE32blinux系统宝典

parallel_force_local                boolean    FALSE32blinux系统宝典

启动手工注册,查看监听器状态。32blinux系统宝典

SQL> alter system register;32blinux系统宝典

System altered.32blinux系统宝典

[oracle@aaalife admin]$ lsnrctl status my_listener32blinux系统宝典

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-SEP-2015 20:50:4732blinux系统宝典

Copyright (c) 1991, 2013, Oracle.  All rights reserved.32blinux系统宝典

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1531)))32blinux系统宝典

STATUS of the LISTENER32blinux系统宝典

------------------------32blinux系统宝典

Alias                    my_listener32blinux系统宝典

Version                  TNSLSNR for Linux: Version 11.2.0.4.0 - Production32blinux系统宝典

Start Date                07-SEP-2015 19:48:5032blinux系统宝典

Uptime                    0 days 1 hr. 1 min. 59 sec32blinux系统宝典

Trace Level              off32blinux系统宝典

Security                  ON: Local OS Authentication32blinux系统宝典

SNMP                      OFF32blinux系统宝典

Listener Parameter File  /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora32blinux系统宝典

Listener Log File        /u01/app/oracle/diag/tnslsnr/aaalife/my_listener/alert/log.xml32blinux系统宝典

Listening Endpoints Summary...32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1531)))32blinux系统宝典

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1531)))32blinux系统宝典

Services Summary...32blinux系统宝典

Service "aaadb" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

Service "aaadbXDB" has 1 instance(s).32blinux系统宝典

Instance "aaadb", status READY, has 1 handler(s) for this service...32blinux系统宝典

The command completed successfully32blinux系统宝典

设置成功,监听器状态中my_listener作为别名alias出现在状态信息中。32blinux系统宝典

4、结论32blinux系统宝典

动态注册是我们最常用的注册模式。多个配置文件(Oracle Net Service)、Oracle参数、监听器设置交织相互作用影响,期间又有网络网卡、域名解析等多因素作用,很容易出现问题故障。多实验、多测试,可以帮助我们抽丝剥茧,逐步深入的了解系统,在日常工作中更加游刃有余。32blinux系统宝典

更多Oracle相关信息见 专题页面 32blinux系统宝典



沪ICP备10206494号-4