远程连接 Oracle 报 ORA-12541 完整修复教程
适用场景:本地能连 Oracle、远程连接报错 ORA-12541: TNS:no listener,Windows 环境
一、问题原因
从你的日志可明确:
- Oracle 监听默认只绑定
127.0.0.1,仅允许本机访问 - 监听重启后数据库实例未自动注册,远程依然无法识别服务
二、前置准备
-
登录Oracle 所在服务器 ,以管理员身份打开 CMD
-
找到监听配置文件路径(以你的环境为例):
E:\BaiduNetdiskDownload\network\admin\listener.ora
三、第一步:修改监听配置,允许远程访问
-
打开
listener.ora文件 -
全量替换 为以下配置(直接复制覆盖):
iniLISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = E:\BaiduNetdiskDownload) (PROGRAM = extproc) ) ) -
保存并关闭文件
四、第二步:重启监听生效
管理员 CMD 中依次执行:
cmd
lsnrctl stop
lsnrctl start
重启成功后执行:
cmd
lsnrctl status
看到 HOST=0.0.0.0 即配置生效:
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
五、第三步:注册数据库实例到监听
监听启动后,数据库不会自动注册,需手动执行:
-
CMD 登录数据库:
cmdsqlplus / as sysdba -
执行注册语句:
sqlalter system register; -
退出 SQL:
sqlexit -
再次查看监听状态:
cmdlsnrctl status
出现以下内容即为正常:
服务 "orcl" 包含 1 个实例。
实例 "orcl", 状态 READY...
六、第四步:开放服务器 1521 端口
-
管理员 CMD 执行放行命令:
cmdnetsh advfirewall firewall add rule name="Oracle 1521" dir=in action=allow protocol=TCP localport=1521 -
云服务器需额外在控制台安全组开放 1521 端口
七、远程连接测试
- 远程电脑使用服务器公网/内网IP连接
- 连接信息示例:
- IP:服务器真实IP
- 端口:1521
- 服务名:orcl
- 测试连接,
ORA-12541错误消失
八、常见验证命令汇总
- 查看监听状态:
lsnrctl status - 停止监听:
lsnrctl stop - 启动监听:
lsnrctl start - 数据库注册监听:
alter system register; - 测试端口通断:
telnet 服务器IP 1521