最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

DBLINK链接不通调试

unix与数据库 bron1984 4浏览

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链接不通调试