您的位置:首页 > 数据库 > Oracle

Oracle 监听动态注册与静态注册

2013-09-08 18:11 501 查看
静态注册

  静态注册是在启动listener时,listener会从listener.ora文件中获取服务名及相关信息。信息包括:实例名和服务名等。

--静态注册时,listener.ora中的内容如下:

#SID_LIST_LISTENER描述对外提供数据库服务的列表;
#两个实例sun,+ASM分别对应服务名orcl01,orcl02
SID_LIST_LISTENER =
(
SID_LIST =
(
SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle)
(PROGRAM = extproc)
)

(
SID_DESC =
(SID_NAME = sun)          --提供注册的实例名
(ORACLE_HOME = /u01/oracle)
(GLOBAL_DBNAME =orcl01)   --向外提供服务名
)

(
SID_DESC =
(SID_NAME = +ASM)
(ORACLE_HOME = /u01/oracle)
(GLOBAL_DBNAME =orcl02)
)
)

#LISTENER部分描述了主机地址、端口及协议
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)


--配置对应的tnsnames.ora 中的节点

-bash-3.00$ more tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/oracle/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

#通过实例名连接
SUN01 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = mysolaris)(PORT = 1521))
)
(CONNECT_DATA =
(SID = sun)
)
)

#通过服务名连接
SUN02 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = mysolaris)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl01)
)
)

#通过实例名连接
ASM01 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = mysolaris)(PORT = 1521))
)
(CONNECT_DATA =
(SID = +ASM)
)
)

#通过服务名连接
ASM02 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = mysolaris)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl02)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)


--启动监听

-bash-3.00$ lsnrctl start

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 10-AUG-2013 20:50:35

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

Starting /u01/oracle/bin/tnslsnr: please wait...

TNSLSNR for Solaris: Version 10.2.0.2.0 - Production
System parameter file is /u01/oracle/network/admin/listener.ora
Log messages written to /u01/oracle/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.100)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.100)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Solaris: Version 10.2.0.2.0 - Production
Start Date                10-AUG-2013 20:50:35
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/oracle/network/admin/listener.ora
Listener Log File         /u01/oracle/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.100)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl01" has 1 instance(s).
Instance "sun", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl02" has 1 instance(s).
Instance "+ASM", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


--可以看到实例sun及实例+ASM都在被监听

Service "orcl01" has 1 instance(s).
Instance "sun", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl02" has 1 instance(s).
Instance "+ASM", status UNKNOWN, has 1 handler(s) for this service...


从上面信息可以看到,静态注册时监听程序所获取的实例名或服务名均来自listener.ora文件

动态注册

  动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。

instance_name默认是:db_name

service_names默认是:db_name.db_domain

  在启动listener时,会从listener.ora读取监听配置,如果该文件不存在,则监听会在主机名对应的IP和1521端口上进行监听。但监听刚刚启动的时候,并没有注册的服务。

1.配置默认端口的动态服务注册

--关闭实例,关闭监听,备份listener.ora

-bash-3.00$ ls -l
-rw-r--r--   1 oracle   oinstall     603 Aug 10 20:50 listener.ora.bak
drwxr-x---   2 oracle   oinstall     512 Jan 21  2013 samples
-rw-r-----   1 oracle   oinstall     172 Dec 26  2003 shrept.lst
-rw-r--r--   1 oracle   oinstall    1056 Aug 10 20:40 tnsnames.ora


--启动监听

-bash-3.00$ lsnrctl start
.........
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Solaris: Version 10.2.0.2.0 - Production
Start Date                10-AUG-2013 22:20:20
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/oracle/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mysolaris)(PORT=1521)))
The listener supports no services
The command completed successfully


  可以看到:监听会在主机名对应的IP和1521端口上进行监听;监听刚刚启动的时候,并没有注册的服务

--启动实例后,查看监听 发现PMON进程会将服务注册进来

-bash-3.00$ lsnrctl status
........
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mysolaris)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
Instance "+ASM", status BLOCKED, has 1 handler(s) for this service...
Service "sun" has 1 instance(s).
Instance "sun", status READY, has 1 handler(s) for this service...
Service "sun_XPT" has 1 instance(s).
Instance "sun", status READY, has 1 handler(s) for this service...
The command completed successfully


2.配置非默认端口的动态服务注册

服务器端的配置

a.配置非默认的listener.ora

-bash-3.00$ more listener.ora

LISTENER02 =     --这个名字最好不要用默认的LISTENER
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mysolaris)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)


b.在配置文件tnsnames.ora中加入

-bash-3.00$ more tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/oracle/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER02 = (
ADDRESS = (PROTOCOL = TCP)
(HOST = mysolaris)
(PORT = 1522)
)
-bash-3.00$


c.启动非默认的侦听器

-bash-3.00$ lsnrctl start LISTENER02

STATUS of the LISTENER
------------------------
Alias                     LISTENER02
Version                   TNSLSNR for Solaris: Version 10.2.0.2.0 - Production
Start Date                10-AUG-2013 23:22:01
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/oracle/network/admin/listener.ora
Listener Log File         /u01/oracle/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.100)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
The listener supports no services
The command completed successfully
-bash-3.00$


d.设定local_listener参数

SQL> alter system set local_listener = 'LISTENER02'; --LISTENER2为tnsnames.ora中的监听名称


e.手动使动态注册立即生效(此操作可有可无)

SQL> alter system register;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: