CentOS 上 Oracle 故障排查手册
一 快速定位路径
ps -ef | grep ora_pmonsqlplus / as sysdbalsnrctl status;必要时 lsnrctl start/stop/reload。$ORACLE_HOME/diag/rdbms/<db_name>/<sid>/trace/alert_<sid>.log$ORACLE_HOME/diag/tnslsnr/<hostname>/listener/trace/listener.log二 常见故障与处理
| 症状 | 关键检查 | 处理要点 |
|---|---|---|
| 数据库实例起不来 | `ps -ef | grep ora_pmon、sqlplus / as sysdba`、告警日志 |
| ORA-12541 无监听程序 | lsnrctl status、端口占用 |
lsnrctl start;若端口被占用,释放或更换端口后重启监听 |
| ORA-12514 监听不识别服务 | lsnrctl status 输出中的服务列表、show parameter service_name、listener.ora/tnsnames.ora |
确保数据库已注册服务(动态或静态);必要时在 listener.ora 添加 SID_LIST_LISTENER 静态注册,或修正 tnsnames.ora 的 SERVICE_NAME |
| TNS-12560 协议适配器错误 | ORACLE_HOME、PATH、lsnrctl start |
校验环境变量:echo $ORACLE_HOME $PATH;确认 listener.ora 地址/端口正确;重启监听 |
| 客户端连不上(PL/SQL/远程) | tnsping <别名>、客户端 tnsnames.ora、firewalld |
校验 tnsnames.ora 的 HOST/PORT/SERVICE_NAME;服务器放行 1521/TCP;必要时用 sqlplus system/oracle@//host:1521/service 直连测试 |
三 监听与服务配置要点
$ORACLE_HOME/network/admin/ 下的 listener.ora 与 tnsnames.ora。listener.ora 中写 SID_LIST_<LISTENER>;listener.ora 增加:SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname_or_ip)(PORT = 1521))
)
)
tnsnames.ora 示例:ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbhost.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
lsnrctl reload 或重启监听;必要时 sqlplus / as sysdba 后执行 alter system register; 促使实例立即向监听注册。四 系统与安全排查
systemctl status firewalldfirewall-cmd --permanent --add-port=1521/tcp && firewall-cmd --reloadsetenforce 0 验证,再按策略放行或永久调整。/etc/hosts 或 DNS 正确解析服务器主机名与 IP,避免监听与客户端解析不一致。netstat -tulpen | grep 1521 确认 1521 未被其他进程占用。五 日志与进一步诊断
select name,value from v$diag_info;(关注 Diag Trace/Diag Alert)tail -n 200 $ORACLE_HOME/diag/rdbms/<db>/<sid>/trace/alert_<sid>.log<sid>_ora_<pid>.trc 与 .trm 可辅助定位 ORA- 错误根因。$ORACLE_HOME/diag/tnslsnr/<hostname>/listener/trace/listener.log,关注启动失败、注册失败、连接拒绝等记录。select MACHINE,count(*) from v$session group by MACHINE order by 2 desc;ORA-01000 超出打开游标上限)。