第三节我们已经大概了解什么是静态注册和动态注册,下面我们将通过两个例子来更加深入了解它们之间的区别。
静态注册:当listener使用的是非标准端口(1522),在listener.ora的文件里手工注册(添加instance name 和 service name)
动态注册:listener 采用的是默认端口(1521),当实例启动时,由pmon 自动将instance name 和service name 注册到listener
 
1、静态注册
(1)通过netca 建立非标准端口的listener :lis2(1522)
(2)修改listener.ora
  ——查看listener.ora
[oracle@work ~]$ cd /u01/app/oracle/product/10.2.0/db_1/network/admin/
[oracle@solaris10 admin]$cat listener.ora
LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = solaris10)(PORT = 1522))
    )
  )
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
  )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = solaris10)(PORT = 1521))
    )
  )
 
——添加静态注册信息
[oracle@solaris10 admin]$vi listener.ora
 
***************************这里面的是静态注册信息*****************************
SID_LIST_LISTENER2 =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = anny)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = anny)
    )
  )
***************************这里面的是静态注册信息************************************
 
LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = solaris10)(PORT = 1522))
    )
  )
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = work)(PORT = 1521))
    )
  )
 
——启动lsn2
[oracle@solaris10 admin]$lsnrctl start listener2
 
LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 16-MAR-2012 17:58:12
 
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
 
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
 
TNSLSNR for Solaris: Version 10.2.0.2.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener2.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=solaris10)(PORT=1522)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=solaris10)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     listener2
Version                   TNSLSNR for Solaris: Version 10.2.0.2.0 - Production
Start Date                16-MAR-2012 17:58:12
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener2.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=solaris10)(PORT=1522)))
Services Summary...
Service "anny" has 1 instance(s).
  Instance "anny", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
 
[oracle@solaris10 admin]$netstat -an|grep 1522
192.168.12.17.34007  192.168.12.31.1522   49640      0 49640      0 ESTABLISHED
192.168.12.17.1522   192.168.12.31.34220  49640      0 49640      0 ESTABLISHED
      *.1522               *.*                0      0 49152      0 LISTEN
 
 
——查看lsn2 status
 
[oracle@solaris10 admin]$lsnrctl status listener2
 
LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 16-MAR-2012 18:02:24
 
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=solaris10)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     listener2
Version                   TNSLSNR for Solaris: Version 10.2.0.2.0 - Production
Start Date                16-MAR-2012 17:58:12
Uptime                    0 days 0 hr. 4 min. 12 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener2.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=solaris10)(PORT=1522)))
Services Summary...
Service "anny" has 1 instance(s).
  Instance "anny", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully                        
                  ——status unknown 表示instance 是以静态注册方式注册
2、动态注册
实现动态注册有两步:在服务端修改tnsnames.ora-->修改参数local_listener
如果前面有进行静态注册,要去listener.ora把静态注册信息删掉
 
——server 配置tnsnames.ora
 
LISTENER2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.12.17)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = anny)
    )
  )
 
——修改参数local_listener
SQL> show parameter local_listener
 
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
local_listener                       string
SQL> alter system set local_listener=listener2;
 
System altered.
 
——客户端链接
 
bash-3.00$ sqlplus sys/oracle@anny1522 as sysdba
 
SQL*Plus: Release 10.2.0.2.0 - Production on Fri Mar 16 18:31:39 2012
 
Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.
 
 
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
 
SQL> show user;
USER 为 "ANNY"
SQL>
总结:
静态注册能够启动多个监听,动态注册只能启动一个监听
启动默认监听时可以注册多个实例,非默认端口就只能启动动态注册的实例