温馨提示×

lsnrctl超时怎么解决

小樊
35
2026-10-10 23:32:36
栏目: 编程语言

lsnrctl(Oracle Listener Control)命令超时,通常表现为执行 lsnrctl status / start / stop 等命令时长时间无响应或报 TNS-12535: TNS:operation timed out 之类错误。下面按常见原因 → 排查步骤 → 解决办法来说明。


一、先确认超时现象

常见报错:

  • TNS-12535: TNS:operation timed out
  • TNS-12545: Connect failed because target host or object does not exist
  • TNS-00515: Connect timeout occurred
  • lsnrctl 命令卡住几十秒甚至几分钟

二、最常见原因及解决办法

1️⃣ listener.ora 中 HOST 配置问题(非常常见)

原因:
listener.ora 中 HOST 写成了主机名,但:

  • 主机名无法解析
  • /etc/hosts 配置错误
  • DNS 慢或不可用

解决办法:

# listener.ora 示例
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )

✅ 建议:

  • 先用 127.0.0.1 或本机 IP
  • 避免只写主机名

2️⃣ 主机名解析慢(Linux 常见)

排查:

hostname
ping $(hostname)

如果 ping 主机名 很慢或失败:

解决: 编辑 /etc/hosts

vi /etc/hosts

确保有:

127.0.0.1   localhost
192.168.1.10  dbserver

并确认 hostname 能在 hosts 中解析。


3️⃣ 防火墙或端口不通

排查:

telnet 127.0.0.1 1521
# 或
netstat -tulnp | grep 1521

解决:

  • 关闭防火墙测试:
systemctl stop firewalld
  • 或放行 1521 端口

4️⃣ listener 实际没启动或僵死

排查:

ps -ef | grep tnslsnr

解决:

lsnrctl stop
lsnrctl start

如果 stop 也超时:

kill -9 <pid>
lsnrctl start

5️⃣ Oracle 环境变量不对

现象:

  • lsnrctl 能执行
  • 但连不上 listener

检查:

echo $ORACLE_HOME
echo $ORACLE_SID
which lsnrctl

解决:

export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

6️⃣ sqlnet.ora 中超时参数影响

检查:

$ORACLE_HOME/network/admin/sqlnet.ora

如存在:

SQLNET.INBOUND_CONNECT_TIMEOUT=0

可临时注释测试。


三、快速自检清单(建议按顺序)

  1. ping 主机名 是否快
  2. listener.ora 是否用 IP
  3. telnet IP 1521 是否通
  4. ps -ef | grep tnslsnr
  5. lsnrctl status 是否仍超时

四、最简“救命”配置(测试用)

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )

如果你愿意,可以把下面信息发我,我可以精准判断:

  • Oracle 版本
  • OS(Linux / Windows)
  • listener.ora
  • 具体报错全文

我可以一步一步帮你排。

0 踩