1、lsnrctl start
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 – Production on 28-7月 -2026 10:12:48
Copyright (c) 1991, 2010, Oracle. All rights reserved.
启动tnslsnr: 请稍候…
Service OracleOraGtw11g_home1TNSListener already running.
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
说明:这个报错说明 监听器其实已经在运行了,但 lsnrctl 在尝试再次启动时,和 Windows 的监听服务状态不一致,导致出现 TNS-12560 / TNS-00530(协议适配器错误)
处理: 先检查状态lsnrctl status 如果状态异常(比如1522端口被占用,具体以实际端口为准),再往下看。
查端口占用 netstat -ano | findstr 1522 看到 PID 后: tasklist | findstr <PID>
如果是 非 Oracle 程序 占用了 1522:
- 停掉该程序,或修改监听端口
修改监听端口(listener.ora)
路径一般在:%ORACLE_HOME%\network\admin\listener.ora
修正以后:lsnrctl stop 如果停不掉,直接重启服务:
net stop OracleOraGtw11g_home1TNSListener
net start OracleOraGtw11g_home1TNSListener
lsnrctl start
2、lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 – Production on 28-7月 -2026 10:13:48
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.31)(PORT=1522)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
64-bit Windows Error: 61: Unknown error
你现在的 Oracle 监听程序并没有真正在 192.168.0.31:1522 上运行,
之前 lsnrctl start 说“Service already running”只是 Windows 服务假启动,
实际 TNS 监听进程是死的,所以 lsnrctl status 直接报 TNS-12541 无监听程序。
Windows 服务 OracleOraGtw11g_home1TNSListener
显示:已启动
实际:监听进程没绑到 1522
你执行 lsnrctl start
服务层说:已经在跑
实际 TCP 层:1522 没人听
于是 lsnrctl status 连不上 → TNS-12541
✅ 这是 Windows + Oracle 11.2 的经典“假死监听”
第一步:确认 1522 到底有没有人听
netstat -ano | findstr 1522
情况 A:没有任何输出
👉 监听根本没起来(大概率)
情况 B:有输出,但不是 oracle 进程
👉 被别的程序占了 tasklist | findstr <PID>
listener.ora 改成 HOST = localhost PORT = 1522
net stop 监听服务
lsnrctl start
lsnrctl status
如果这样能起来 → 说明就是 IP/网卡/防火墙 问题,不是 Oracle 本身坏了。
然后localhost 就可以改成正确的 IP 了
3、netstat -ano | findstr 1522
TCP 169.254.244.180:1522 0.0.0.0:0 LISTENING 10316
你本机 确实有进程在 1522 上监听,但是:
169.254.244.180:1522
而不是:
192.168.0.31:1522
👉 监听绑定的 IP 和你 listener.ora 里配置的 IP 不一致
所以:
Windows 服务以为监听起来了
lsnrctl status 去连 192.168.0.31:1522
实际监听在 169.254.244.180:1522
→ TNS-12541:无监听程序
另外:
169.254.x.x 是 APIPA 地址(DHCP 没拿到 IP 自动分配的)
说明 192.168.0.31 这个 IP 当前并不在本机网卡上
停掉现有监听
lsnrctl stop
如果停不掉:
taskkill /PID 10316 /F
net stop OracleOraGtw11g_home1TNSListener
2️⃣ 改 listener.ora
启动
lsnrctl start
lsnrctl status
✅ 只要这里能出 Listening on IPxx.xx.xx.xx:1522,问题就解决了
4、– Create database link
create public database link OALINK
connect to SA identified by “abc@123”
using ‘ecology’;
select “erpzt” plant,”danh” danh from formtable_main_32@OALINK where 1=1;
ORA-28545:连接代理时Net8诊断到错误ORA-02063:紧接着2lines(起自OALINK)
Unable to retrieve text of NETWORK/NCR message 65535
ERP端运行:lsnrctl status
tnsping ecology
立刻在 Linux 侧做 3 个检查
ping 192.168.0.31
telnet 192.168.0.31 1522 或者 在 Linux 上 原样执行 这一句:
timeout 5 bash -c “cat < /dev/null > /dev/tcp/192.168.0.31/1522” && echo “OPEN” || echo “CLOSED”
如果显示 1522 CLOSED 就有问题了。证明192.168.0.31:1522 上没有任何 TCP 监听
彻底杀掉错误监听(169.254 那个)
taskkill /PID 10316 /F
确认:
netstat -ano | findstr 1522
✅ 无任何输出
修改 listener.ora(关键)
打开:
%ORACLE_HOME%\network\admin\listener.ora
改成 最稳妥版本(先用这个):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.31)(PORT = 1522))
)
)
启动监听并验证
lsnrctl start
netstat -ano | findstr 1522
✅ 必须看到这一行(一字不差):
TCP 192.168.0.31:1522 0.0.0.0:0 LISTENING <新PID>
如果还是:
169.254.x.x:1522
→ 说明 listener.ora 没生效 / 服务没停干净
回到 Linux 侧验证(验收标准)
在 Linux 上再执行一次:
timeout 5 bash -c “cat < /dev/null > /dev/tcp/192.168.0.31/1522” && echo “1522 OPEN” || echo “1522 CLOSED”
✅ 正确结果必须是:
1522 OPEN
然后:
tnsping ecology
✅ 必须看到:
OK (xx msec)
到这一步,网络 + 监听问题彻底结束。
5、等待补充
转载请注明:赫非域 » DBLINK链接不通调试