Ubuntu 上 lsnrctl 常见错误与排查步骤
一 快速自检清单
su - oracle。which lsnrctl、echo $PATH、echo $ORACLE_HOME、echo $ORACLE_SID。lsnrctl status;日志默认在 $ORACLE_HOME/diag/tnslsnr/lsnrctl stop → lsnrctl start,再 lsnrctl status 复核。二 常见错误与对应解决
| 症状 | 可能原因 | 解决要点 |
|---|---|---|
| command not found | 未安装 Oracle 客户端/服务端;PATH 未包含 $ORACLE_HOME/bin;命令拼写错误 | 安装相应组件;将 export PATH=$PATH:$ORACLE_HOME/bin 写入 ~/.bashrc 或 /etc/profile 并执行 source;用 which lsnrctl 校验 |
| 权限不足/Operation not permitted | 当前用户非 oracle;或 /var/tmp/.oracle 权限/属主异常 | 切换到 oracle 用户;执行 ls -ld /var/tmp/.oracle,必要时 chown -R oracle:dba /var/tmp/.oracle 或 chmod 777 /var/tmp/.oracle |
| TNS-12555/TNS-12560/TNS-00525 | 启动监听时权限被拒(常见于 /var/tmp/.oracle 权限问题) | 同上,修复 /var/tmp/.oracle 的属主/权限后重启监听 |
| TNS-12514 | 监听未识别请求的服务;listener.ora 未静态注册 SID;数据库未向监听注册 | 在 listener.ora 的 SID_LIST_LISTENER 中静态注册数据库 SID;确保数据库实例启动后由 PMON 动态注册;重启监听再测 |
| ORA-12162 | ORACLE_SID 未设置或设置错误 | 执行 export ORACLE_SID=<你的SID>(写入 ~/.bashrc 持久化),再运行 sqlplus / as sysdba |
| 无法远程连接 1521 | 监听未启动;listener.ora 端口配置错误;Ubuntu 防火墙/云安全组未放行 | lsnrctl start 并用 lsnrctl status 确认监听端口为 1521;核对 listener.ora 中的 (PORT=1521);开放防火墙/安全组策略 |
三 关键配置文件与示例
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname_or_ip)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORCL) # 替换为你的 SID
(ORACLE_HOME = /opt/oracle/product/11g) # 替换为你的 ORACLE_HOME
)
)
lsnrctl stop → lsnrctl start → lsnrctl status 验证服务与端口。四 实用命令速查
~/.bashrc 后 source ~/.bashrc):export ORACLE_HOME=/opt/oracle/product/11g
export ORACLE_SID=ORCL
export PATH=$PATH:$ORACLE_HOME/bin
lsnrctl status、lsnrctl start、lsnrctl stopsqlplus / as sysdba → startup(必要时先 shutdown immediate)$ORACLE_HOME/diag/tnslsnr/<hostname>/listener/alert/log.xml五 仍无法解决时的定位思路
which lsnrctl 与 echo $ORACLE_HOME 输出合理。lsnrctl status 与 alert.log 获取首个报错点,优先处理如 TNS-12514/12555 等明确错误。netstat -tlnp | grep 1521,服务器防火墙/云安全组是否放行 TCP 1521。