查看SID是否启动OK命令:
echo $ORACLE_SID
监听器相关命令:
lsnrctl status --查看状态
lsnrctl start --启动
lsnrctl stop --关闭
lsnrctl reload --重启等于stop与start
lsnrctl service --启动服务
http://blog.itpub.net/95233/viewspace-623699/
http://blog.csdn.net/tianlesoftware/article/details/6617827
http://www.cnblogs.com/czjie/archive/2011/10/30/2228196.html
Oracle动态注册机制从ORACLE8I就已提供,以前在学习此部分内容时,理解得不够透彻,似是而非,没有真正掌握。
最近重新学习了一下此部分内容,并查阅了一些文档,初有成就。现小结一下:
测试环境:
操作系统:RHEL4.6
数据库:ORACLE10G 10.2.0.4
一、首先要理解基本概念
1、 Oracle的监听器和实例,是完全独立开的。
2、 实例必须要注册到某一个或多个实例上,这样远程用户方可连上。
3、 端口号,是由监听器决定的。远程连接的端口,必须要跟监听器的端口一致。
二、实践测试
1、 测试用例1,创建第一个监听器(PROTOCOL=TCP、HOST=linux1、端口号为1521),创建第一个实例ORCL,其自动注册到PROTOCOL=TCP、HOST=linux1、端口号为1521的监听器上。
Listener.ora内容如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/ora10g/product/10.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /opt/ora10g/product/10.2.0)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
首先启动监听器LISTENER:
[oracle@linux1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:07:58
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
Linux Error: 111: Connection refused
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
Linux Error: 111: Connection refused
[oracle@linux1 ~]$ lsnrctl start
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:09:25
Copyright (c) 1991, 2007, Oracle. All rights reserved.
启动/opt/ora10g/product/10.2.0/bin/tnslsnr: 请稍候...
TNSLSNR for Linux: Version 10.2.0.4.0 - Production
系统参数文件为/opt/ora10g/product/10.2.0/network/admin/listener.ora
写入/opt/ora10g/product/10.2.0/network/log/listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1521)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:09:27
正常运行时间 0 天 0 小时 0 分 1 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
服务摘要..
服务 "ORCL" 包含 1 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
然后,启动数据库实例ORCL
[oracle@linux1 ~]$ export ORACLE_SID=ORCL
[oracle@linux1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期日 12月 27 22:11:41 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 268435456 bytes
Fixed Size 1266968 bytes
Variable Size 88083176 bytes
Database Buffers 176160768 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
数据库已经打开。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
再查看监听器状态:
[oracle@linux1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:12:53
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:09:27
正常运行时间 0 天 0 小时 3 分 26 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
[oracle@linux1 ~]$ lsnrctl service
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:13:06
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
命令执行成功
此时实例ORCL已自动注册到监听器LISTENER上。实例ORCL既有静态注册也有动态注册。
2、 测试用例2,创建第二个实例ORCL1522,其也自动注册到PROTOCOL=TCP、HOST=linux1、端口号为1521的监听器上。
LISTENER.ORA文件内容没有变化:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/ora10g/product/10.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /opt/ora10g/product/10.2.0)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
启动实例orcl1522:
[oracle@linux1 admin]$ export ORACLE_SID=orcl1522
[oracle@linux1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期日 12月 27 22:19:16 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 268435456 bytes
Fixed Size 1266968 bytes
Variable Size 100666088 bytes
Database Buffers 163577856 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
数据库已经打开。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
查看监听器LISTENER状态:
[oracle@linux1 admin]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:19:39
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:09:27
正常运行时间 0 天 0 小时 10 分 12 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl1522" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl1522_XPT" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
[oracle@linux1 admin]$ lsnrctl service
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:19:49
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
服务 "orcl1522" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "orcl1522_XPT" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
命令执行成功
此时实例和实例均已注册到监听器LISTENER上,其中实例ORCL既有静态注册也有动态注册,实例orcl1522只有动态注册。
3、 测试用例3,创建第二个监听器(PROTOCOL=TCP、HOST=linux1、端口号为1522),同时修改第二个数据库ORCL1522的local_listener为(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1522))
创建完第二个监听器LISTENER1522后,LISTENER.ORA文件的内容如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/ora10g/product/10.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /opt/ora10g/product/10.2.0)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
LISTENER1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)
)
同时在服务器端的TNSNAMES.ORA文件中增加一下内容:
listener1522=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1522))
启动实例orcl1522:
[oracle@linux1 admin]$ export ORACLE_SID=orcl1522
[oracle@linux1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期日 12月 27 22:19:16 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 268435456 bytes
Fixed Size 1266968 bytes
Variable Size 100666088 bytes
Database Buffers 163577856 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
数据库已经打开。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
修改参数LOCAL_LISTENER,然后重启实例:
[oracle@linux1 admin]$ export ORACLE_SID=orcl1522
[oracle@linux1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期日 12月 27 22:22:18 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show parameter listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
remote_listener string
SQL> alter system set local_listener='listener1522';
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 268435456 bytes
Fixed Size 1266968 bytes
Variable Size 100666088 bytes
Database Buffers 163577856 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
数据库已经打开。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
查看默认监听器LISTENER状态:
[oracle@linux1 admin]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:23:56
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:09:27
正常运行时间 0 天 0 小时 14 分 28 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
此时监听器上只有ORCL实例,原来注册的实例orcl1522已去掉。
启动新的监听器LISTENER1522,同时启动它:
[oracle@linux1 admin]$ lsnrctl
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:24:11
Copyright (c) 1991, 2007, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL> set current_listener listener1522
目前的监听程序为 listener1522
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
Linux Error: 111: Connection refused
LSNRCTL> start
启动/opt/ora10g/product/10.2.0/bin/tnslsnr: 请稍候...
TNSLSNR for Linux: Version 10.2.0.4.0 - Production
系统参数文件为/opt/ora10g/product/10.2.0/network/admin/listener.ora
写入/opt/ora10g/product/10.2.0/network/log/listener1522.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1522)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 listener1522
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:24:48
正常运行时间 0 天 0 小时 0 分 0 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener1522.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1522)))
监听程序不支持服务
命令执行成功
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 listener1522
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:24:48
正常运行时间 0 天 0 小时 0 分 7 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener1522.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1522)))
监听程序不支持服务
命令执行成功
LSNRCTL> exit
监听器LISTENER1522刚启动时,实例orcl1522尚未注册,需手工到实例中注册一下(alter system register),或者等一下由实例的PMON进程自动注册到监听器LISTENER1522上。
[oracle@linux1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期日 12月 27 22:25:11 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter system register;
系统已更改。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
查看监听器LISTENER1522状态:
[oracle@linux1 admin]$ lsnrctl
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:25:24
Copyright (c) 1991, 2007, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL> set current_listener listener1522
目前的监听程序为 listener1522
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 listener1522
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:24:48
正常运行时间 0 天 0 小时 0 分 54 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener1522.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1522)))
服务摘要..
服务 "orcl1522" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl1522_XPT" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
LSNRCTL> service
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)))
服务摘要..
服务 "orcl1522" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "orcl1522_XPT" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
命令执行成功
LSNRCTL> set cuurent_listener listener
NL-00853: 未定义的 set 命令 "cuurent_listener"。请尝试 "help set"
LSNRCTL> set current_listener listener
目前的监听程序为 listener
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:09:27
正常运行时间 0 天 0 小时 17 分 12 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
LSNRCTL> exit
此时发现实例orcl1522已注册到监听器LISTENER1522上,实例ORCL注册到监听器LISTENER上。同时,实例orcl1522均为动态注册,实例ORCL既有动态注册也有静态注册。
再在实例orcl1522中去掉参数local_listener的值:
[oracle@linux1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期日 12月 27 22:27:40 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter system set local_listener='';
系统已更改。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
分别查看监听器LISTENER1522、LISTENER状态:
[oracle@linux1 admin]$ lsnrctl
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 27-12月-2009 22:27:59
Copyright (c) 1991, 2007, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL> set current_listener listener1522
目前的监听程序为 listener1522
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 listener1522
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:24:48
正常运行时间 0 天 0 小时 3 分 28 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener1522.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1522)))
监听程序不支持服务
命令执行成功
LSNRCTL> set current_listener listener
目前的监听程序为 listener
LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 10.2.0.4.0 - Production
启动日期 27-12月-2009 22:09:27
正常运行时间 0 天 0 小时 19 分 13 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/ora10g/product/10.2.0/network/admin/listener.ora
监听程序日志文件 /opt/ora10g/product/10.2.0/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl1522" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl1522_XPT" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
LSNRCTL> service
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux1)(PORT=1521)))
服务摘要..
服务 "ORCL" 包含 2 个例程。
例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "ORCL_XPT" 包含 1 个例程。
例程 "ORCL", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
服务 "orcl1522" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "orcl1522_XPT" 包含 1 个例程。
例程 "orcl1522", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
命令执行成功
LSNRCTL>
实例orcl1522去掉local_listener参数值后,其马上重新自动注册到默认监听器LISTENER上。
三、总结
1、 数据库时自动注册时,监听器必须满足三条件:PROTOCOL=TCP,HOST=本机电脑名(或为localhost),PORT=1521。这三个条件只有有一个不满足,实例都不能自动注册。
2、 采用自动注册时,监听器配置中的HOST=?,需要设置为其电脑的机器名(或为localhost),不要直接设置为IP地址。否则,对于第一个实例而言,其就无法自动注册到1521这个监听器上。
3、 同一个监听器可以监听多个实例,都是TCP、端口号1521。见测试用例2。
4、 在一台配置多个监听器的电脑上,本地的一个实例能够注册到的本地监听器只能有一个。见测试用例3。
5、 一个实例除了可注册到本地的监听器外,还可通过remote_listener注册到远程服务器上。主要的应用为RAC数据库,用例请参见http://space.itpub.net/9252210/viewspace-592111。
参考文档:
1、eygle_第一章数据库的启动和关闭.pdf
2、http://warehouse.itpub.net/post/777/472788
3、http://space.itpub.net/9252210/viewspace-592111
4、http://space.itpub.net/175005/viewspace-173527
5、http://www.lorentzcenter.nl/awcourse/oracle/network.920/a96580/listener.htm