pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,要想让pmon动态注册listener,需要设置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)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1522))
)


--=======================================

因为listener.ora中port是1522而非默认的1521,因此此时pmon不会动态注册监听:

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 小时 0 分 7 秒

跟踪级别 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;

系统已更改。

上述命令执行之后再次查看pmon是否动态注册了listener,下面结果显示还是没有动态注册:

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 小时 0 分 12 秒

跟踪级别 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 个处理程序...

命令执行成功

--============================================

没有注册的原因是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 =(ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1522)))';

系统已更改。

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>


小小菜鸟一枚