pmon仅动态注册port=1521的监听。 否则,pmon无法动态注册监听器。 要使pmon动态注册监听器,必须设置local_listener参数。
接下来是大致的测试过程。
1.
listener.ora的内容如下。
-===================-======-=============================================================
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl )
(Oracle _ home=e : Oracle product 10.2.0 db _1)
(SID_NAME=orcl )
)
(SID_DESC=
(GLOBAL_DBNAME=test )
(Oracle _ home=e : Oracle product 10.2.0 db _1)
(SID_NAME=test )
)
)
监听器=
(DESCRIPTION=
(address=(protocol=TCP ) (HOST=xys ) (PORT=1522 ) )
)
-===================-======-=============================================================
在listener.ora中,port缺省为1522而不是1521,因此pmon此时不会动态注册监听。
LSNRCTL status
已连接到
(description=(address=(protocol=TCP ) ) HOST=xys ) (PORT=1522 ) )
监听器状态
----------------
别名列表
tnslsnr for 32-bit windows 3360版本10.2.0.1.0-produ
ction
启动日期25-10月-2008 20:22:50
正常工作时间0天0小时0分7秒
跟踪电平off
安全on :密码定位
关闭SNMP
侦听器参数文件e : Oracle product 10.2.0 db _1networkadminlistener.o
ra
监听程序日志文件e : Oracle product 10.2.0 db _1networkloglistener.log
监听端点概述.
(description=(address=(protocol=TCP ) ) HOST=xys ) (PORT=1522 ) )
服务概述.
服务“orcl”包含一个例程。
实例' orcl ',状态UNKNOWN,包含此服务的一个处理程序.
服务“test”包含一个例程。
例程' test ',状态UNKNOWN,包含此服务的一个处理程序.
命令执行成功
-====================-======-============================================================
命令强制注册:
SQLaltersystem注册表;
系统已更改。
执行上述命令后,再次验证pmon是否已动态注册到监听器,以下结果指示是否未动态注册:
LSNRCTL status
已连接到
(description=(address=(protocol=TCP ) ) HOST=xys ) (PORT=1522 ) )
监听器状态
----------------
别名列表
tnslsnr for 32-bit windows 3360版本10.2.0.1.0-produ
ction
启动日期25-10月-2008 20:22:50
正常运行时间0天0小时0分12秒
跟踪电平off
安全on :密码定位
关闭SNMP
侦听器参数文件e : Oracle product 10.2.0 db _1networkadminlistener.o
ra
监听程序日志文件e : Oracle product 10.2.0 db _1networkloglistener.log
监听端点概述.
(描述=(a
DDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))服务摘要..
服务 "orcl" 包含 1 个例程。
例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "test" 包含 1 个例程。
例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
--============================================
没有注册的原因是pmon
default只会注册port=1521的listener。如果想让pmon动态注册prot以外的监听,此时需要设置参数
local_listener=listener:
下面设置参数local_listener:
SQL> alter system set local_listener=listener;
alter system set local_listener=listener
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-00119: 系统参数 LOCAL_LISTENER 的说明无效
ORA-00132: 语法错误或无法解析的网络名称 'LISTENER'
--提示错误,错误的原因是设置参数local_listener时需要把下面内容增加到服务器端的tnsnames.ora中,因为pmon在动态注册监听时要从tnsnames.ora中读取相关信息:
接下来把下面内容增加到服务器端的tnsnames.ora中
--======================================
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1522))
)
--=====================================
再次尝试修改local_listener参数,修改成功:
SQL> alter system set local_listener=listener;
系统已更改。
SQL>
--=========================================
修改之后过一会查看是否动态注册了监听,发现已经注册了:
LSNRCTL> status
正在连接到
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 25-10月-2008 20:22:50
正常运行时间 0 天 0 小时 1 分 50 秒
跟踪级别 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
监听程序参数文件 e:oracleproduct10.2.0db_1networkadminlistener.o
ra
监听程序日志文件 e:oracleproduct10.2.0db_1networkloglistener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服务摘要..
服务 "orcl" 包含 2 个例程。
例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl_XPT" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "test" 包含 1 个例程。
例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
LSNRCTL>
2.也可以把local_listener设置为address or address list:
SQL> alter system set local_listener='(DESCRIPTION
=
2 (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1522))
3 )';
系统已更改。
LSNRCTL> stop
正在连接到
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
命令执行成功
LSNRCTL> start
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 -
Production
系统参数文件为e:oracleproduct10.2.0db_1networkadminlistener.ora
写入e:oracleproduct10.2.0db_1networkloglistener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
正在连接到
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 25-10月-2008 20:39:07
正常运行时间 0 天 0 小时 0 分 3 秒
跟踪级别 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
监听程序参数文件 e:oracleproduct10.2.0db_1networkadminlistener.o
ra
监听程序日志文件 e:oracleproduct10.2.0db_1networkloglistener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服务摘要..
服务 "orcl" 包含 1 个例程。
例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "test" 包含 1 个例程。
例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
LSNRCTL> status
正在连接到
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 25-10月-2008 20:39:07
正常运行时间 0 天 0 小时 0 分 6 秒
跟踪级别 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
监听程序参数文件 e:oracleproduct10.2.0db_1networkadminlistener.o
ra
监听程序日志文件 e:oracleproduct10.2.0db_1networkloglistener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服务摘要..
服务 "orcl" 包含 1 个例程。
例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "test" 包含 1 个例程。
例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
SQL> alter system register;
系统已更改。
SQL>
LSNRCTL> status
正在连接到
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 25-10月-2008 20:39:07
正常运行时间 0 天 0 小时 0 分 21 秒
跟踪级别 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
监听程序参数文件 e:oracleproduct10.2.0db_1networkadminlistener.o
ra
监听程序日志文件 e:oracleproduct10.2.0db_1networkloglistener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服务摘要..
服务 "orcl" 包含 2 个例程。
例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl_XPT" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "test" 包含 1 个例程。
例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
LSNRCTL>