记录下刚刚做的一个为一个数据库(t02)配置多个监听(listener)的实验,过程有点小曲折。
(1)新增两个测试的监听,listener.ora的配置内容(可纯手动编辑该文件或使用netca)如下:
(LISTENER为系统原有;L1、L2为测试用新增的监听)
[sql]
view plain
copy
- # listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
-
# Generated
by Oracle configuration tools.
- L2 =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = PC1255-20110528)(PORT = 1523))
- )
- )
- L1 =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = PC1255-20110528)(PORT = 1522))
- )
- )
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (SID_NAME = PLSExtProc)
- (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
- (PROGRAM = extproc)
- )
- )
- LISTENER =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
-
(ADDRESS = (PROTOCOL = IPC)(
KEY = EXTPROC1))
- (ADDRESS = (PROTOCOL = TCP)(HOST = PC1255-20110528)(PORT = 1521))
- )
- )
(2)配置tnsnames.ora,使数据库(t02)可同时使用以上3个监听:
[sql]
view plain
copy
- # tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
-
# Generated
by Oracle configuration tools.
- T01 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = PC1255-20110528)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = t01)
- )
- )
- T02 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = PC1255-20110528)(PORT = 1521))
- (ADDRESS = (PROTOCOL = TCP)(HOST = PC1255-20110528)(PORT = 1522))
- (ADDRESS = (PROTOCOL = TCP)(HOST = PC1255-20110528)(PORT = 1523))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = t02)
- )
- )
- EXTPROC_CONNECTION_DATA =
- (DESCRIPTION =
- (ADDRESS_LIST =
-
(ADDRESS = (PROTOCOL = IPC)(
KEY = EXTPROC1))
- )
- (CONNECT_DATA =
- (SID = PLSExtProc)
- (PRESENTATION = RO)
- )
- )
(3)检查及测试,发现问题:
检查的时候发现除了默认的LISTENER监听外,L1和L2始终不能注册服务:
[sql]
view plain
copy
- C:\>lsnrctl
-
LSNRCTL
for 32-
bit Windows: Version 10.2.0.1.0 – Production
on 24-7月 -2011 22:19:24
-
Copyright (c) 1991, 2005, Oracle.
All rights reserved.
-
欢迎来到LSNRCTL, 请键入
"help"以获得信息。
- LSNRCTL> status
-
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(
KEY=EXTPROC1)))
- LISTENER 的 STATUS
-
————————
- 别名 LISTENER
-
版本 TNSLSNR
for 32-
bit Windows: Version 10.2.0.1.0 – Production
- 启动日期 24-7月 -2011 22:14:18
- 正常运行时间 0 天 0 小时 5 分 13 秒
-
跟踪级别
off
-
安全性
ON:
Local OS Authentication
-
SNMP
OFF
- 监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
- 监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\listener.log
- 监听端点概要…
- (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PC1255-20110528)(PORT=1521)))
- 服务摘要..
-
服务
"+ASM_XPT" 包含 1 个例程。
-
例程
"+asm", 状态 BLOCKED, 包含此服务的 1 个处理程序…
-
服务
"+asm" 包含 1 个例程。
-
例程
"+asm", 状态 BLOCKED, 包含此服务的 1 个处理程序…
-
服务
"PLSExtProc" 包含 1 个例程。
-
例程
"PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序…
-
服务
"t01" 包含 1 个例程。
-
例程
"t01", 状态 READY, 包含此服务的 1 个处理程序…
-
服务
"t01XDB" 包含 1 个例程。
-
例程
"t01", 状态 READY, 包含此服务的 1 个处理程序…
-
服务
"t01_XPT" 包含 1 个例程。
-
例程
"t01", 状态 READY, 包含此服务的 1 个处理程序…
- 命令执行成功
- LSNRCTL> stop
-
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(
KEY=EXTPROC1)))
- 命令执行成功
-
LSNRCTL>
set curr L1
- 目前的监听程序为 L1
- LSNRCTL> status
- 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=PC1255-20110528)(PORT=1522)))
- LISTENER 的 STATUS
-
————————
- 别名 L1
-
版本 TNSLSNR
for 32-
bit Windows: Version 10.2.0.1.0 – Production
- 启动日期 24-7月 -2011 22:14:19
- 正常运行时间 0 天 0 小时 5 分 26 秒
-
跟踪级别
off
-
安全性
ON:
Local OS Authentication
-
SNMP
OFF
- 监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
- 监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\l1.log
- 监听端点概要…
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PC1255-20110528)(PORT=1522)))
- 监听程序不支持服务
- 命令执行成功
-
LSNRCTL>
set curr L2
- 目前的监听程序为 L2
- LSNRCTL> status
- 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=PC1255-20110528)(PORT=1523)))
- LISTENER 的 STATUS
-
————————
- 别名 L2
-
版本 TNSLSNR
for 32-
bit Windows: Version 10.2.0.1.0 – Production
- 启动日期 24-7月 -2011 22:14:19
- 正常运行时间 0 天 0 小时 5 分 38 秒
-
跟踪级别
off
-
安全性
ON:
Local OS Authentication
-
SNMP
OFF
- 监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
- 监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\l2.log
- 监听端点概要…
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PC1255-20110528)(PORT=1523)))
- 监听程序不支持服务
- 命令执行成功
停止了默认的LISTENER监听后,使用tns进行连接测试的时候报错(ORA-12514):
[sql]
view plain
copy
-
C:\Documents
and Settings\Administrator>sqlplus scott/tiger@t02
-
SQL*Plus: Release 10.2.0.1.0 – Production
on 星期日 7月 24 22:20:06 2011
-
Copyright (c) 1982, 2005, Oracle.
All rights reserved.
- ERROR:
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
(4)分析问题:
一阵google之后发现,如果默认端口不是1521,则需要设置LOCAL_LISTENER来手动指定监听别名:
When configuring the listener to listen on TCP/IP, you should enter the default port of 1521. If you do not, you must configure the LOCAL_LISTENER parameter in the intialization parameter file and resolve the listener name through a naming method.
http://download.oracle.com/docs/cd/B13789_01/network.101/b10775/listenercfg.htm
(5)解决问题(此处的T02为step 2的tnsnames.ora里面的T02):
[sql]
view plain
copy
-
C:\Documents
and Settings\Administrator>
set oracle_sid=t02
-
C:\Documents
and Settings\Administrator>sqlplus /
as sysdba
-
SQL*Plus: Release 10.2.0.1.0 – Production
on 星期日 7月 24 22:21:55 2011
-
Copyright (c) 1982, 2005, Oracle.
All rights reserved.
- 已连接到空闲例程。
-
SQL>
select status,instance_name
from v$instance;
- STATUS INSTANCE_NAME
-
———————— ——————————–
-
OPEN t02
-
SQL>
alter system
set local_listener=
"T02";
- 系统已更改。
- SQL>
(6)验证,再测试:
验证,发现L1、L2已能正常注册服务:
[sql]
view plain
copy
-
LSNRCTL>
set curr L1
- 目前的监听程序为 L1
- LSNRCTL> status
- 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=PC1255-20110528)(PORT=1522)))
- LISTENER 的 STATUS
-
————————
- 别名 L1
-
版本 TNSLSNR
for 32-
bit Windows: Version 10.2.0.1.0 – Production
- 启动日期 24-7月 -2011 22:14:19
- 正常运行时间 0 天 0 小时 32 分 54 秒
-
跟踪级别
off
-
安全性
ON:
Local OS Authentication
-
SNMP
OFF
- 监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
- 监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\l1.log
- 监听端点概要…
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PC1255-20110528)(PORT=1522)))
- 服务摘要..
-
服务
"t02" 包含 1 个例程。
-
例程
"t02", 状态 READY, 包含此服务的 1 个处理程序…
-
服务
"t02XDB" 包含 1 个例程。
-
例程
"t02", 状态 READY, 包含此服务的 1 个处理程序…
-
服务
"t02_XPT" 包含 1 个例程。
-
例程
"t02", 状态 READY, 包含此服务的 1 个处理程序…
- 命令执行成功
-
LSNRCTL>
set curr L2
- 目前的监听程序为 L2
- LSNRCTL> status
- 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=PC1255-20110528)(PORT=1523)))
- LISTENER 的 STATUS
-
————————
- 别名 L2
-
版本 TNSLSNR
for 32-
bit Windows: Version 10.2.0.1.0 – Production
- 启动日期 24-7月 -2011 22:14:19
- 正常运行时间 0 天 0 小时 33 分 6 秒
-
跟踪级别
off
-
安全性
ON:
Local OS Authentication
-
SNMP
OFF
- 监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
- 监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\l2.log
- 监听端点概要…
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PC1255-20110528)(PORT=1523)))
- 服务摘要..
-
服务
"t02" 包含 1 个例程。
-
例程
"t02", 状态 READY, 包含此服务的 1 个处理程序…
-
服务
"t02XDB" 包含 1 个例程。
-
例程
"t02", 状态 READY, 包含此服务的 1 个处理程序…
-
服务
"t02_XPT" 包含 1 个例程。
-
例程
"t02", 状态 READY, 包含此服务的 1 个处理程序…
- 命令执行成功
- LSNRCTL>
再测试,发现scott用户能够正常登录:
[sql]
view plain
copy
-
C:\Documents
and Settings\Administrator>sqlplus scott/tiger@t02
-
SQL*Plus: Release 10.2.0.1.0 – Production
on 星期日 7月 24 22:24:43 2011
-
Copyright (c) 1982, 2005, Oracle.
All rights reserved.
- 连接到:
-
Oracle
Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
-
With the Partitioning, OLAP
and Data Mining options
- SQL>
(7)总结
当监听的端口是默认的1521时,PMON会动态注册该监听(listener);
当监听的端口不是默认的1521时,需要使用alter system set local_listener="T02";来手动注册监听。