“the listener supports no services”说明监听器已启动但无实例注册,dg备库因不接受写操作默认禁用pmon动态注册,必须配置与监听名严格匹配的sid_list_*静态注册,并确保global_dbname、sid_name、oracle_home及hosts解析全部正确。
lsnrctl status 显示 “the listener supports no services”
这说明监听器进程已启动,但没有任何数据库实例向它注册服务。在 dg 环境中,备库默认不接受写操作,pmon 不会主动向监听器动态注册(除非显式启用),所以动态注册天然失效。你看到的不是监听没起来,而是“没人来报到”。
- 先确认当前监听名:运行
lsnrctl status,看输出里用的是LISTENER还是LISTENER_DG—— DG 场景下必须区分监听器名称 - 检查数据库是否处于 MOUNT 状态:
select open_mode from v$database;,备库必须是MOUNT,否则静态注册配置可能被忽略 - 别依赖
alter system register,它只触发动态注册,在 DG 备库上无效
listener.ora 中 SID_LIST_* 配置不生效
常见原因是监听器名称与 SID_LIST 段落名不匹配。Oracle 要求二者严格一致:如果监听器叫 LISTENER_DG,那静态注册段必须是 SID_LIST_LISTENER_DG,而不是 SID_LIST_LISTENER。
- 打开
$ORACLE_HOME/network/admin/listener.ora - 确认监听器定义块名,例如:
LISTENER_DG = (DESCRIPTION_LIST = ...) - 对应添加静态注册块:
SID_LIST_LISTENER_DG = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = hisdbdg)(SID_NAME = hisdbdg)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1))) -
GLOBAL_DBNAME应与备库的service_names一致(查show parameter service_names);SID_NAME必须等于v$instance.instance_name的值 - 修改后必须执行
lsnrctl reload LISTENER_DG(不是stop/start),否则旧配置仍在内存中
tnsping 或远程连接仍报 TNS-12514
错误提示“监听器当前不知道连接中请求的服务描述符”,本质是客户端请求的服务名(SERVICE_NAME)和监听器实际加载的服务名对不上。这不是网络或防火墙问题,是命名映射断层。
- 运行
lsnrctl status LISTENER_DG,重点看 Services Summary 下列出的服务名,比如显示Service "hisdbdg",那客户端连接串里SERVICE_NAME就必须填hisdbdg,不能填hisdb或hisdb_DGMGRL - 检查
tnsnames.ora(客户端或备库本机)中对应条目,确保SERVICE_NAME与监听器报告的服务名完全一致(大小写敏感) - 若使用 SCAN 或 VIP 连接,确认
local_listener参数未意外指向主库监听器:show parameter local_listener,DG 备库应设为空或指向本地LISTENER_DG - Windows 下注意路径中的反斜杠转义问题,Linux 下注意文件权限(监听器进程需有读取
listener.ora的权限)
重启监听后状态仍是 UNKNOWN 而非 READY
出现 Instance "hisdbdg", status UNKNOWN 表示监听器能识别 SID,但无法验证实例是否真实可用——通常因为实例未启动、未 mount,或 ORACLE_HOME 路径写错。
- 确认
SID_DESC中的ORACLE_HOME是备库真实的 Oracle 安装路径,且该路径下存在bin/oracle - 检查
/etc/hosts是否把监听器配置的HOST名正确解析为一个可路由 IP(避免解析成127.0.0.1或空行) - 如果用主机名(如
oradg)而非 IP 配置HOST,确保nslookup oradg返回的是备库网卡 IP,不是 loopback - 监听日志(
$ORACLE_HOME/log/diag/tnslsnr/*/listener/trace/listener.log)里搜TNS-01150或Failed to auto-start instance,能直接定位路径或权限问题
静态注册不是补丁,是 DG 备库的必需配置。动态注册在备库上默认关闭,靠 PMON 推送服务名这条路走不通。所有配置项名、服务名、路径、主机解析,必须逐字对齐,差一个字母或大小写,lsnrctl status 就只会沉默。











