You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12c监听器异常及数据库启动失败问题求助

Oracle 12c 备份恢复后监听器配置异常问题分析与修复

问题根源拆解

1. ORA-00119/ORA-00132 错误直接原因

这两个错误明确指向**LOCAL_LISTENER初始化参数配置无效**:要么参数指定的网络服务名在tnsnames.ora中找不到对应配置,要么该服务名对应的地址和监听器实际监听的地址不匹配,导致数据库启动时无法向监听器注册服务。

2. 监听器状态仅显示CLRExtProc(UNKNOWN)的原因

CLRExtProc是Oracle外部过程调用的静态注册服务,状态UNKNOWN是正常的(静态注册的服务不会随数据库状态变化)。之前DBA配置后显示的3个READY服务,是数据库实例启动后动态注册到监听器的服务——现在动态注册失败,说明监听器和数据库实例的地址配置不匹配,实例无法把自己的服务信息上报给监听器。

3. 关闭数据库时配置文件被自动重写的可能原因

  • 存在自定义脚本:比如关闭数据库的脚本里包含了netca自动配置命令,会覆盖listener.ora和tnsnames.ora;
  • Grid Infrastructure(GI)管理:如果你的环境用了Oracle GI(比如RAC或单实例GI),GI会自动管理监听器配置文件,手动修改会被GI的配置同步覆盖;
  • 系统定时任务:Linux的crontab或Windows任务计划里有定时修改配置文件的任务。

快速修复步骤

第一步:修正LOCAL_LISTENER参数

  1. 登录空闲实例:
    sqlplus / as sysdba
    
  2. 查看当前LOCAL_LISTENER配置:
    SHOW PARAMETER LOCAL_LISTENER;
    
  3. 临时修改参数(重启数据库后需确保写入spfile永久生效):
    • 如果直接指定地址(避开tnsnames解析问题):
      ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=你的服务器IP)(PORT=1521))' SCOPE=SPFILE;
      
    • 如果tnsnames.ora里有正确的服务名(比如ORCL_LISTENER),则设置为:
      ALTER SYSTEM SET LOCAL_LISTENER='ORCL_LISTENER' SCOPE=SPFILE;
      

第二步:修正listener.ora配置

  1. 打开$ORACLE_HOME/network/admin/listener.ora,确保监听器监听地址和上面设置的一致,示例配置:
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 你的服务器IP)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1)
          (PROGRAM = extproc)
          (ENVS = "EXTPROC_DLLS=ONLY:/u01/app/oracle/product/12.2.0/dbhome_1/bin/oraclr12.dll")
        )
      )
    
    注意:ORACLE_HOME路径要替换成你实际的安装路径。
  2. 重启监听器:
    lsnrctl stop && lsnrctl start
    

第三步:启动数据库并验证

  1. 在sqlplus中启动数据库:
    STARTUP;
    
  2. 执行lsnrctl status,此时应该能看到数据库服务状态为READY;再用tnsnames.ora里的服务名登录验证:
    sqlplus username/password@你的服务名
    

避免配置文件被自动覆盖的建议

  • 锁定配置文件:Linux环境下给文件加只读权限(需要修改时再改回可写):
    chmod 444 $ORACLE_HOME/network/admin/listener.ora $ORACLE_HOME/network/admin/tnsnames.ora
    
  • 检查自动配置源:如果是GI环境,必须用srvctl命令修改监听器配置,禁止手动编辑文件;如果是自定义脚本,修改脚本去掉自动覆盖配置的逻辑;
  • 排查定时任务:Linux下检查crontab -l,Windows下查看任务计划,删除或禁用修改配置文件的任务。

内容的提问来源于stack exchange,提问作者Catalanforyouforever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:06:01