ora-12541错误主因是监听器绑定地址为localhost或127.0.0.1,仅限本地访问;须修改listener.ora中host为服务器实际ip或0.0.0.0,并执行lsnrctl reload验证status中address显示正确ip,再检查防火墙。
ora-12541 错误不能靠盲目重启监听服务解决。很多用户执行 lsnrctl stop + lsnrctl start 后发现错误依旧,根本原因是监听进程虽然重启了,但配置没变、绑定地址仍是 localhost 或 127.0.0.1,远程请求依然进不来。
为什么 lsnrctl restart 通常无效
重启监听器只刷新运行状态,不校验或修正配置文件。只要 listener.ora 中的 HOST 值还是 localhost,监听就只会绑定到回环地址。此时:
- 本地
tnsping ORCLCDB或sqlplus /@ORCLCDB能通(走的是回环) - Navicat 从 Windows 远程连
192.168.x.x:1521必然失败(监听根本没监听这个 IP) -
lsnrctl status显示“READY”,但 Address 列里 Host 是localhost或127.0.0.1
必须检查 listener.ora 的 HOST 配置
路径在 $ORACLE_HOME/network/admin/listener.ora,关键段落类似:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
这里 HOST = localhost 就是罪魁祸首。应改为:
-
HOST = 192.168.111.133(服务器实际 IP,推荐) - 或
HOST = 0.0.0.0(监听所有接口,仅限可信内网) - 绝对不要留空、不要写错别字(如
locahost)、不要用未解析的主机名
改完后必须执行 lsnrctl reload(不是 restart),让监听器热加载新配置。
reload 之后还要验证监听是否真绑定了正确地址
执行 lsnrctl status,重点看输出里的 Address 行:
- ✅ 正确:
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.111.133)(PORT=1521)) - ❌ 错误:
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))或(HOST=127.0.0.1)
再从客户端(如 Windows)用 telnet 192.168.111.133 1521 测试端口可达性。如果仍不通,问题已不在 Oracle 监听层,而是 CentOS 防火墙(firewalld)或虚拟网络设置挡住了 1521 端口。
真正卡住人的地方,往往不是监听没启动,而是它“假装在岗”——进程活着、状态显示正常、但耳朵只对着自己听。改配置 + reload + 看 status 输出里的真实 HOST 值,这三步缺一不可。











