centos上oracle故障如何排查
导读:CentOS 上 Oracle 故障排查手册 一 快速定位路径 明确现象:是数据库无法启动、监听异常,还是客户端连不上;记录报错码(如 ORA-12514、TNS-12541、TNS-12560)与报错原文。 检查实例是否存活: 查看进...
CentOS 上 Oracle 故障排查手册
一 快速定位路径
- 明确现象:是数据库无法启动、监听异常,还是客户端连不上;记录报错码(如 ORA-12514、TNS-12541、TNS-12560)与报错原文。
- 检查实例是否存活:
- 查看进程:
ps -ef | grep ora_pmon - 本机登录:
sqlplus / as sysdba
- 查看进程:
- 检查监听状态:
lsnrctl status;必要时lsnrctl start/stop/reload。 - 核对监听端口:netstat -tulpen | grep 1521;若端口被占用,处理占用进程或更换端口。
- 查看告警日志:
- 数据库告警:
$ORACLE_HOME/diag/rdbms/< db_name> /< sid> /trace/alert_< sid> .log - 监听器日志:
$ORACLE_HOME/diag/tnslsnr/< hostname> /listener/trace/listener.log
- 数据库告警:
- 网络与安全:确认服务器与客户端之间网络可达,且 firewalld/iptables 放行 1521/TCP。
二 常见故障与处理
| 症状 | 关键检查 | 处理要点 |
|---|---|---|
| 数据库实例起不来 | `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。 - 动态 vs 静态监听:
- 动态注册由实例自动向监听注册服务,通常无需在
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 firewalld - 放行端口:
firewall-cmd --permanent --add-port=1521/tcp & & firewall-cmd --reload
- 查看状态:
- SELinux:如怀疑拦截,可临时
setenforce 0验证,再按策略放行或永久调整。 - 主机名解析:确保
/etc/hosts或 DNS 正确解析服务器主机名与 IP,避免监听与客户端解析不一致。 - 端口冲突:
netstat -tulpen | grep 1521确认 1521 未被其他进程占用。
五 日志与进一步诊断
- 数据库告警与跟踪:
- 定位 ADR 根:
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- 错误根因。
- 定位 ADR 根:
- 监听器日志:
$ORACLE_HOME/diag/tnslsnr/< hostname> /listener/trace/listener.log,关注启动失败、注册失败、连接拒绝等记录。 - 连接与负载核查(已能登录时):
- 按机器统计会话:
select MACHINE,count(*) from v$session group by MACHINE order by 2 desc; - 检查游标/锁等常见瓶颈(如
ORA-01000超出打开游标上限)。
- 按机器统计会话:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos上oracle故障如何排查
本文地址: https://pptw.com/jishu/750334.html
