监听器启动后秒退是因listener.ora中HOST值错误:localhost/127.0.0.1仅绑定环回且Oracle 19c解析失败时直接崩溃;旧主机名、硬编码IP均不可靠;应填系统可稳定解析的FQDN或主网卡IP,并用ping验证,改完必须先lsnrctl reload校验再重启服务。

listener.ora 里的 HOST 值填错了,监听器根本绑不上地址
监听器启动后几秒就退,Windows 服务管理器显示“已启动”又变回“已停止”,TNSLSNR.EXE 进程根本没起来——这八成是 listener.ora 中的 HOST 值无法解析或不可绑定。
常见错误包括:
-
HOST = localhost或HOST = 127.0.0.1:监听器只绑环回接口,远程连不上;更糟的是 Oracle 19c+ 在 DNS 解析失败时直接退出进程,不报错 -
HOST = DESKTOP-ABC123(旧主机名):系统重命名、克隆虚拟机、断网后 hostname 已变,但配置没更新 -
HOST = 192.168.1.100(硬编码 IP):DHCP 分配变动、网卡切换后失效
正确做法是填当前系统能稳定解析的值:
- Windows:用
echo %COMPUTERNAME%+ipconfig /all | findstr "Primary Dns"拼出 FQDN(如db-srv01.corp.local) - Linux:优先用
hostname -f;若失败,再用hostname -I | awk '{print $1}'取主网卡 IPv4 - 验证:运行
ping -n 1 your.fqdn(Windows)或ping -c 1 your.fqdn(Linux),必须通且解析到有效 IP
改完 listener.ora 别急着重启服务,先用 lsnrctl reload 验证
直接在 services.msc 里点“重启”监听服务,大概率还是失败——Windows 服务管理器不校验配置语法,tnslsnr.exe 启动即崩溃,状态迅速回滚,你根本看不到错误在哪。
务必手动进命令行操作:
- 以管理员身份打开 CMD
- 执行
lsnrctl进入交互模式 - 输入
reload:它会重新读取listener.ora,检查语法,热加载配置;失败时明确提示哪一行出错(如TNS-01155) - 成功后执行
status,确认输出中Listening Endpoints Summary的HOST是你刚填的值,且端口(默认1521)出现在netstat -ano | findstr :1521结果里
只有这时,再去 services.msc 点“重启”或执行 net start OracleOraDb19c_home1TNSListener 才有意义。
服务账户没权限,监听器连进程都拉不起来
即使配置全对,监听服务仍启动失败,可能是服务账户缺关键权限。
查服务属性里的“登录”选项卡:
- 若用
LocalSystem:需手动给NETWORK SERVICE组加“作为服务登录”权限(secpol.msc→ 本地策略 → 用户权利指派) - 若用自定义账户(如
ORACLE\svc):该账户必须同时属于ORA_DBA和Users组,并在$ORACLE_HOME\bin、$ORACLE_HOME\network\admin、$ORACLE_HOME\diag目录有“读取与执行”+“写入”权限
改完权限后,不能点“重新启动”——要先 net stop OracleOraDb19c_home1TNSListener,等 10 秒,再 net start,否则旧进程句柄未释放,新权限不生效。
注册表 ImagePath 错了或 ORACLE_HOME 不一致,tnslsnr.exe 根本找不到
服务状态栏显示“正在运行”,但 lsnrctl status 报 TNS-12541: no listener,或者 tasklist /fi "imagename eq tnslsnr.exe" 查不到进程——说明 Windows 虽然尝试启动,但 tnslsnr.exe 没真正跑起来。
重点检查两处:
- 注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraDb19c_home1TNSListener下的ImagePath值,必须是完整可执行路径(如"C:\app\oracle\product\19c\dbhome_1\BIN\tnslsnr.exe" -inherit),且目录真实存在、无中文/空格乱码 - 环境变量:
ORACLE_HOME必须和注册表ImagePath中的路径严格一致;不一致就修正环境变量,并重启 CMD 或资源管理器
多版本共存时尤其容易出错——卸载旧版 Oracle 后注册表残留旧路径,服务仍试图加载已删除目录下的 tnslsnr.exe,静默失败。
HOST 值、reload 验证、服务账户权限、注册表 ImagePath —— 这四点漏掉任何一环,监听器都会“启动即停”。别跳步骤,尤其别绕过 lsnrctl reload 直接点服务重启,那是最常被忽略也最浪费时间的操作。


















