Oracle OCP认证考试题目详解082系列第57题
一、考察的知识点摘要
本题主要考察 Oracle 数据库中动态服务注册(Dynamic Service Registration)的机制,特别是与 LOCAL_LISTENER
参数相关的配置要点。关键知识点包括:LOCAL_LISTENER
参数的作用与设置方式、TNSNAMES.ORA
文件在监听器地址解析中的功能、动态注册的触发进程(LREG 或 PMON),以及多监听器在同一主机上的并行运行规则。题目还涉及对监听器配置文件中必要结构的判断(如 CONNECT DATA
部分的用途),以及动态注册对 LISTENER.ORA
文件的依赖性。
二、英文题目和答案
英文题目:
In the spfile of a single instance database, LOCAL LISTENER is set to LISTENER 1. The TNSNAMES ORA file in $ORACLE_HOME/network/admin in the database home contains:
LISTENER 1 =
(ADDRESS=
(PROTOCOL= TCP)
(HOST = host1.abc.com)
(PORT=1521)
)
Which statement is true?
A. There are two listeners named LISTENER and LISTENER 1 running simultaneously using port 1521 on the same host as the database instances
B. The definition for LISTENER 1 requires a CONNECT DATA section to enable dynamic service registration
C. LISTENER 1 must also be defined in the LISTENER ORA file to enable dynamic service registration
D. The LREG process registers services dynamically with the LISTENER_1 listener
E. Dynamic service registration cannot be used for this database instance
答案: A
三、题目和选项的翻译
题目翻译:
在单实例数据库的 spfile 中,LOCAL_LISTENER 参数被设置为 LISTENER_1。数据库主目录下 $ORACLE_HOME/network/admin 中的 TNSNAMES.ORA 文件包含以下内容:
LISTENER_1 =
(ADDRESS=
(PROTOCOL= TCP)
(HOST = host1.abc.com)
(PORT=1521)
)
下列哪项陈述是正确的?
选项翻译:
A. 两个名为 LISTENER 和 LISTENER_1 的监听器在同一主机上使用端口 1521 同时运行,且该主机与数据库实例所在主机相同
B. 为启用动态服务注册,LISTENER_1 的定义需要包含 CONNECT DATA 部分
C. 为启用动态服务注册,LISTENER_1 必须在 LISTENER.ORA 文件中定义
D. LREG 进程会向 LISTENER_1 监听器动态注册服务
E. 此数据库实例无法使用动态服务注册
四、题目解析
- 选项 A 正确:
Oracle 允许在同一主机上运行多个监听器实例,只要它们使用不同的名称(如默认的LISTENER
和自定义的LISTENER_1
),即使它们监听相同的端口(例如 1521)。动态服务注册机制使得数据库实例可以同时向多个监听器注册服务,LOCAL_LISTENER
参数指向LISTENER_1
并不会禁用默认监听器LISTENER
。因此,两个监听器可以并行工作。 - 选项 B 错误:
TNSNAMES.ORA
文件中监听器地址的定义仅需要ADDRESS
部分来指定协议、主机和端口信息。CONNECT DATA
部分用于定义客户端连接时的服务名或实例名,是客户端连接描述符的一部分,并非监听器动态注册自身的必需内容。动态服务注册的启用依赖于数据库参数(如LOCAL_LISTENER
)和正确的地址格式,与CONNECT DATA
无关。 - 选项 C 错误:
动态服务注册的启用主要依赖于LOCAL_LISTENER
参数是否正确指向TNSNAMES.ORA
中定义的监听器地址网络服务名。虽然监听器进程本身需要在LISTENER.ORA
文件中配置才能启动运行,但动态注册机制本身并不要求监听器名称必须在LISTENER.ORA
中有静态定义。PMON 或 LREG 进程通过读取TNSNAMES.ORA
中的解析地址即可完成注册。 - 选项 D 错误:
在 Oracle 12c 及更高版本中,动态服务注册确实由 LREG 进程负责(12c 之前由 PMON 进程负责)。然而,选项 D 的表述存在一个细微但关键的问题:题目中LOCAL_LISTENER
设置和TNSNAMES.ORA
中定义的名称为LISTENER 1
(可能包含空格),而选项 D 中写的是LISTENER_1
(使用下划线)。在 Oracle 的网络配置中,网络服务名是大小写敏感且严格匹配的,这种命名不一致可能导致解析失败。因此,尽管 LREG 进程会尝试向LOCAL_LISTENER
指定的监听器注册,但此选项因名称不匹配的潜在风险而不被选为正确答案。 - 选项 E 错误:
设置LOCAL_LISTENER
参数并确保TNSNAMES.ORA
中有对应的正确地址条目,正是为了启用和配置动态服务注册到非默认监听器。因此,动态服务注册完全可以用于此数据库实例。
五、考察的知识点详情
-
动态服务注册机制:
- 工作原理:数据库实例启动后,后台进程(Oracle 12c 之前是 PMON,12c 及之后是 LREG)会自动向监听器注册服务信息,包括实例名、服务名和可用服务处理器(如调度进程或专用服务器进程)。这避免了在
LISTENER.ORA
中进行繁琐的静态配置(SID_LIST)。 - 触发条件:默认情况下,动态注册只指向名称是
LISTENER
、端口为 1521、协议为 TCP 的默认监听器。若需注册到非默认监听器(如不同端口或不同名称),则必须设置LOCAL_LISTENER
参数,并确保该参数值能在TNSNAMES.ORA
文件(或其他名称解析方法)中正确解析为监听器的地址。
- 工作原理:数据库实例启动后,后台进程(Oracle 12c 之前是 PMON,12c 及之后是 LREG)会自动向监听器注册服务信息,包括实例名、服务名和可用服务处理器(如调度进程或专用服务器进程)。这避免了在
-
LOCAL_LISTENER
参数的关键作用:- 功能:此参数用于指定数据库实例进行动态服务注册时所要连接的非默认监听器的地址。参数值是一个网络服务名,Oracle 会通过在
TNSNAMES.ORA
文件等名称解析库中查找该名称来获取实际的网络地址(HOST 和 PORT)。 - 配置示例:在 SPFILE 或 PFILE 中设置
LOCAL_LISTENER = 'LISTENER_1'
,并在TNSNAMES.ORA
中确保有LISTENER_1 = (ADDRESS=(PROTOCOL=TCP)(HOST=host1.abc.com)(PORT=1521))
这样的对应条目。
- 功能:此参数用于指定数据库实例进行动态服务注册时所要连接的非默认监听器的地址。参数值是一个网络服务名,Oracle 会通过在
-
多监听器并行运行的条件:
- 端口冲突处理:同一台主机上可以运行多个监听器实例并监听相同的端口(如 1521),前提是每个监听器必须有唯一的名称。例如,默认监听器
LISTENER
和自定义监听器LISTENER_1
可以同时使用 1521 端口。 - 实际应用:这种配置常用于实现连接负载均衡、故障转移或隔离特定类型的业务流量。
- 端口冲突处理:同一台主机上可以运行多个监听器实例并监听相同的端口(如 1521),前提是每个监听器必须有唯一的名称。例如,默认监听器
-
配置文件的分工与协同:
TNSNAMES.ORA
:主要用于网络服务名到网络地址的映射。对于监听器定义,只需ADDRESS
部分即可,CONNECT_DATA
部分是客户端连接时用来指定目标服务或实例的,并非监听器自身定义所必需。LISTENER.ORA
:用于定义监听器进程本身的运行参数,如监听器名称、监听的协议地址等。监听器需要在此文件中定义后才能启动。但动态注册信息主要来源于数据库实例的注册请求,而非此文件中的静态配置。SPFILE/PFILE
:存储数据库实例的初始化参数,包括LOCAL_LISTENER
的设置,指导 LREG/PMON 进程向何处注册服务。
-
常见错误与排查:
- ORA-00119 和 ORA-00132 错误:这些错误通常表示
LOCAL_LISTENER
参数设置的值无法在TNSNAMES.ORA
文件中解析或存在语法错误。解决方法包括检查TNSNAMES.ORA
中对应条目的拼写和语法是否正确,或者暂时清空LOCAL_LISTENER
参数值,使用默认监听器。 - 监听器未显示注册服务:使用
lsnrctl status [listener_name]
命令检查监听器状态。如果动态注册的服务状态为 “READY”,表示注册成功;若为 “UNKNOWN”,通常表示是静态注册或注册有问题。可以尝试执行ALTER SYSTEM REGISTER;
命令强制立即注册。
- ORA-00119 和 ORA-00132 错误:这些错误通常表示