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

来源:互联网 发布:手机画漫画的软件 编辑:程序博客网 时间:2024/05/16 10:58

出自:

http://winlei.blog.51cto.com/1130829/800312

client端如果想要连接到远程的数据库服务器,首先数据库服务器必须启动监听器

oracle监听器的配置在$ORACLE_HOME/network/admin/listener.ora,打开这个文件,我们看到配置如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC=
     (SID_NAME = PLSExtProc)
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0.1)
     (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION=
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
  )
动态注册:oracleinstance的pmon进程会在instance启动之后自动将instance_name和service_name注册到1521端口中,我们只需要在listener中修改配置如下,即可实现
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION=
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.102)(PORT =1521))
    )
  )
注意我们不用修改SID_LIST_LISTENER中的配置

我们首先启动监听器 lsnrctl
LSNRCTL> start
Starting /u01/app/oracle/product/10.2.0.1/bin/tnslsnr: pleasewait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is/u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Log messages written to/u01/app/oracle/product/10.2.0.1/network/log/listener.log
Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=1521)))

Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                    LISTENER
Version                  TNSLSNR for Linux: Version 10.2.0.1.0 - Production
StartDate               22-FEB-2012 07:40:42
Uptime                   0 days 0 hr. 0 min. 0 sec
TraceLevel              off
Security                 ON: Local OS Authentication
SNMP                     OFF
Listener Parameter File  /u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Listener LogFile        /u01/app/oracle/product/10.2.0.1/network/log/listener.log
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1handler(s) for this service...
The command completed successfully
由于我们没有启动instance,所以没有instance的注册信息

启动oracle实例
[oracle@localhost ~]$ export ORACLE_SID=prod
[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Feb 22 07:42:492012

Copyright (c) 1982, 2005, Oracle.  All rightsreserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  180355072 bytes
FixedSize                 1218364 bytes
VariableSize             88082628 bytes
DatabaseBuffers          83886080 bytes
RedoBuffers               7168000 bytes
Database mounted.
Database opened.
prod instance已经启动,稍等一会我们查看监听器状态
LSNRCTL> status
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                    LISTENER
Version                  TNSLSNR for Linux: Version 10.2.0.1.0 - Production
StartDate               22-FEB-2012 07:40:42
Uptime                   0 days 0 hr. 3 min. 15 sec
TraceLevel              off
Security                 ON: Local OS Authentication
SNMP                     OFF
Listener Parameter File  /u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Listener LogFile        /u01/app/oracle/product/10.2.0.1/network/log/listener.log
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1handler(s) for this service...
Service "prod" has 1 instance(s).
  Instance "prod", status READY, has 1 handler(s)for this service...
Service "prod_XPT" has 1 instance(s).
  Instance "prod", status READY, has 1 handler(s)for this service...
The command completed successfully
发现prod服务已经被动态注册进去,其中status为READY说明动态注册成功

静态注册:由于oracle的pmon进程会自动将instance的instance_name和service_name注册到1521端口,如果我们想把instance注册到1521之外的端口,我们只能使用静态注册
下面我们修改listener.ora配置如下:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC=
     (SID_NAME = PLSExtProc)
     (ORACLE_HOME = /u01/app/oracle/product/10.2.0.1)
     (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION=
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
  )
staticReg =
  (DESCRIPTION_LIST =
    (DESCRIPTION=
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.102)(PORT =1522))
    )
  )
SID_LIST_staticReg =
    (SID_LIST=
    (SID_DESC=
       (GLOBAL_DBNAME= prod)
       (ORACLE_HOME = /u01/app/oracle/product/10.2.0.1)
       (SID_NAME = prod)
     )
)
我们首先增加了监听配置:
staticReg =
  (DESCRIPTION_LIST =
    (DESCRIPTION=
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.102)(PORT =1522))
    )
  )
不同于动态注册,我们必须指定listenername,这里为staticReg
然后增加了SID_LIST关于staticReg的指定配置
SID_LIST_staticReg =
    (SID_LIST=
    (SID_DESC=
       (GLOBAL_DBNAME= prod)
       (ORACLE_HOME = /u01/app/oracle/product/10.2.0.1)
       (SID_NAME = prod)
     )
)

由于是非标准端口号,我们必须指定SID_LIST配置
保存之后,启动监听:
[oracle@localhost admin]$ lsnrctl

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 22-FEB-201207:51:03

Copyright (c) 1991, 2005, Oracle.  All rightsreserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> start
Starting /u01/app/oracle/product/10.2.0.1/bin/tnslsnr: pleasewait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is/u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Log messages written to/u01/app/oracle/product/10.2.0.1/network/log/listener.log
Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))

Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                    LISTENER
Version                  TNSLSNR for Linux: Version 10.2.0.1.0 - Production
StartDate               22-FEB-2012 07:51:06
Uptime                   0 days 0 hr. 0 min. 0 sec
TraceLevel              off
Security                 ON: Local OS Authentication
SNMP                     OFF
Listener Parameter File  /u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Listener LogFile        /u01/app/oracle/product/10.2.0.1/network/log/listener.log
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1handler(s) for this service...
The command completed successfully
之后启动instance prod 
[oracle@localhost ~]$ export ORACLE_SID=prod
[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Feb 22 07:42:492012

Copyright (c) 1982, 2005, Oracle.  All rightsreserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  180355072 bytes
FixedSize                 1218364 bytes
VariableSize             88082628 bytes
DatabaseBuffers          83886080 bytes
RedoBuffers               7168000 bytes
Database mounted.
Database opened.

无论我们等待多久,查看状态都是下面显示的内容
LSNRCTL> status
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                    LISTENER
Version                  TNSLSNR for Linux: Version 10.2.0.1.0 - Production
StartDate               22-FEB-2012 07:51:06
Uptime                   0 days 0 hr. 1 min. 37 sec
TraceLevel              off
Security                 ON: Local OS Authentication
SNMP                     OFF
Listener Parameter File  /u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Listener LogFile        /u01/app/oracle/product/10.2.0.1/network/log/listener.log
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1handler(s) for this service...
The command completed successfully

由于我们采用的监听端口是1522,pmon进程是不会自动注册是1521之外的端口
我们需要启动1522端口的监听
LSNRCTL> start staticReg
Starting /u01/app/oracle/product/10.2.0.1/bin/tnslsnr: pleasewait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is/u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Log messages written to/u01/app/oracle/product/10.2.0.1/network/log/staticreg.log
Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=1522)))

Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.102)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                    staticReg
Version                  TNSLSNR for Linux: Version 10.2.0.1.0 - Production
StartDate               22-FEB-2012 07:56:18
Uptime                   0 days 0 hr. 0 min. 0 sec
TraceLevel              off
Security                 ON: Local OS Authentication
SNMP                     OFF
Listener Parameter File  /u01/app/oracle/product/10.2.0.1/network/admin/listener.ora
Listener LogFile        /u01/app/oracle/product/10.2.0.1/network/log/staticreg.log
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=1522)))
Services Summary...
Service "prod" has 1 instance(s).
  Instance "prod", status UNKNOWN, has 1handler(s) for this service...
The command completed successfully
由于prod采用的是静态注册,所以状态永远都是UNKNOW
等一会,我们就可以直接采用sqlplus连接,当然客户端必须有对应的tnsname的配置
C:\Users\lei_dong>sqlplus sys/prod@port1522 as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 2月 22 23:58:062012

Copyright (c) 1982, 2005, Oracle.  All rightsreserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -Production
With the Partitioning, OLAP and Data Mining options

SQL>
连接成功,

最后我们需要在client端配置tnsname,这时无论启动的是1521还是其他端口的监听,差别都不大,基本上只有端口号的差异

linux =
  (DESCRIPTION =
    (ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.102)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = prod)
    )
  )
  
port1522 =
  (DESCRIPTION =
    (ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.102)(PORT = 1522))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = prod)
    )
  )


原创粉丝点击