远程连接Oracle 19C时出现ORA-12541: TNS:无监听程序错误求助
解决Oracle 19C远程连接ORA-12541错误的方案
核心问题分析
你遇到的ORA-12541: TNS:no listener错误,本质是客户端(机器A)无法找到目标机器(B)上运行的Oracle监听服务。你当前提供的是机器A的配置,但问题根源在机器B的监听配置上。
关键修复步骤
1. 修改机器B的listener.ora配置
机器B的监听如果绑定localhost,只会监听本地127.0.0.1的请求,外部机器无法访问。需要修改监听的绑定地址:
- 打开机器B的
listener.ora文件(通常在$ORACLE_HOME/network/admin目录下) - 将
HOST = localhost替换为机器B的实际IP(比如192.168.1.11),或者用0.0.0.0允许所有IP访问:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
2. 重启机器B的监听服务
在机器B的命令行执行:
lsnrctl stop lsnrctl start
执行lsnrctl status检查监听状态,确认输出的ADDRESS项包含机器B的外部IP,而非仅localhost。
3. 验证监听可达性
在机器A上执行以下命令测试监听连通性:
tnsping 192.168.1.11:1521/orcl
如果返回OK,再尝试用原sqlplus命令连接。
4. 确认监听已注册目标服务
如果tnsping通了但仍无法连接,检查机器B的监听是否注册了orcl服务:
- 在机器B执行
lsnrctl status,查看Services Summary部分是否存在orcl服务。 - 若未注册,可在数据库中执行以下命令手动注册:
ALTER SYSTEM REGISTER;
或修改数据库初始化参数local_listener指向监听,再重启数据库:
ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.11)(PORT=1521))' SCOPE=BOTH;
关于Oracle远程连接的设置说明
Oracle不需要像SQL Server那样单独开启“远程连接”开关,但必须满足两个条件:
- 监听服务绑定了外部可访问的IP地址(而非仅localhost)
- 监听已正确注册了目标数据库服务(SID/SERVICE_NAME)
内容的提问来源于stack exchange,提问作者henrry
相关产品推荐
相关产品推荐

