Oracle 监听端口被占起不来?先定位 PID,再决定杀进程还是改端口

Oracle 监听端口被占起不来?先定位 PID,再决定杀进程还是改端口

一、典型表现

  • Linux:lsnrctl start 返回 TNS-12541 / TNS-12560 / TNS-00511。
  • Windows:OracleOraDB...TNSListener 服务启动后立即停止。
  • 监听日志($ORACLE_BASE/diag/tnslsnr/主机/listener/alert/log.xml)出现 Cannot bind to address 或 Address already in use。
  • 隐蔽型:监听器能起,但远程时断时续、动态注册失败。

二、先定位占用进程

Linux:netstat -anp | grep 1521 / ss -ltnp | grep 1521 / lsof -i:1521
Windows:netstat -ano | findstr 1521 再 tasklist /fi "PID eq 1234"

同时检查 IPv4/IPv6 监听绑定(有的进程只绑 127.0.0.1 或 0.0.0.0,导致特定网卡上起不来)。也用 ps -ef | grep tnslsnr 排查残留监听进程。

三、两种处理思路

场景做法
占用者是无关残留进程确认身份后 kill -9 PID / taskkill /PID xxx /F,再起监听
占用者是另一 Oracle 实例别杀,给新实例改监听端口(如 1522/1526)

四、改监听端口步骤

  • 停监听,备份 $ORACLE_HOME/network/admin/listener.ora(Windows 路径形如 C:\app\oracle\product\19.0.0\dbhome_1\network\admin\)。
  • 将 PORT = 1521 改为 PORT = 1522(无显式端口则补 ADDRESS 段)。
  • 若用动态注册,调整 LOCAL_LISTENER 参数指向新端口,重启监听;另注意 OEM 的 5500、Grid Infrastructure 内部端口也可能冲突,一并排查。