温馨提示×

centos oracle故障排查流程

小樊
41
2026-01-02 03:02:28
栏目: 云计算

CentOS 上 Oracle 故障排查流程

一 快速定位与信息收集

  • 明确现象与影响范围:记录故障的发生时间持续时长影响用户/业务,并观察CPU、内存、I/O、网络等系统指标与应用响应时间。
  • 检查实例与监听:
    • 查看实例进程:ps -ef | grep pmon;登录 SQL*Plus:sqlplus / as sysdba;尝试 startup
    • 查看监听:lsnrctl status,必要时 lsnrctl start
  • 收集日志:
    • Oracle 告警与跟踪:tail -n 200 $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log,以及对应进程的 *.trc/*.trm
    • 操作系统日志:/var/log/messages/var/log/syslogdmesg | tail -n 200
  • 初步性能快照:
    • AWR/ASH(如有权限):@?/rdbms/admin/awrrpt.sql@?/rdbms/admin/ashrpt.sql,定位Top SQL资源争用
    • 动态视图:v$sessionv$lockv$sqlv$system_event 等,快速识别阻塞会话锁等待异常 SQL

二 常见故障场景与处理要点

场景 典型症状 快速检查 处理要点
实例无法启动 sqlplus 显示 idle,startup 失败 alert.log;`ipcs -m/-s grep oraclefree -mdmesg
找不到参数文件 ORA-01078 / LRM-00109 echo $ORACLE_SIDls $ORACLE_HOME/dbs/init$ORACLE_SID.ora admin/$ORCL/pfile/ 复制备份 init.oradbs/,修正属主属组为 oracle:oinstall,再 startup
监听不可用 ORA-12541: TNS:no listener lsnrctl statuscat $ORACLE_HOME/network/admin/listener.ora 修正 listener.ora/tnsnames.oralsnrctl stop/start
连接超时 ORA-12170: TNS:Connect timeout systemctl status firewalldfirewall-cmd --list-ports 开放端口:firewall-cmd --zone=public --add-port=1521/tcp --permanent && firewall-cmd --reload
端口被占用 netca/启动监听报端口冲突 `netstat -tulpen grep 1521;检查 /etc/hostsORACLE_HOSTNAME`
内存目标不支持 ORA-00845(11g) df -h /dev/shm mount -o remount,size=2G /dev/shm(或按需增大)
高 CPU 或间歇变慢 top 中 oracle 占用高,SQL 时快时慢 v$sqlareacpu_time/elapsed_time 排序;v$session/v$process 关联 spid 识别异常 SQL 并优化;必要时临时限流/杀阻塞会话;复核优化器反馈等参数
常见等待事件 latch: cache buffers chainsbuffer busy waitscursor: pin S wait on X AWR/ASH Top Events;v$session_wait/dba_hist_active_sess_history 热块/低效 SQL:SQL 优化、分区、重建索引、调 PCTFREE;游标争用:减少硬解析、固化 SQL、合理 cursor_sharing

三 性能与锁等待定位命令清单

  • 会话与阻塞
    • 当前会话与等待:select sid,serial#,username,event,seconds_in_wait,state from v$session where wait_class!='Idle';
    • 阻塞树:select lpad(' ',2*level)||sid||','||serial#||','||username||','||event from v$session connect by prior sid=blocking_session start with blocking_session is null;
  • SQL 与执行计划
    • Top SQL(CPU/逻辑读):select sql_id,sql_text,executions,elapsed_time,cpu_time,disk_reads,buffer_gets from v$sqlarea order by cpu_time desc fetch first 20 rows only;
    • 绑定变量与执行计划:select * from table(dbms_xplan.display_cursor('&sql_id',null,'ALLSTATS LAST'));
    • 跟踪与格式化:alter session set sql_trace=true; ... tkprof <trace_file> <out_file> sys=no sort=prsela,exeela,fchela;
  • 等待事件与历史
    • AWR/ASH:生成报告定位 Top 10 前台事件、SQL、实例活动;必要时查询 dba_hist_active_sess_history 回溯时段内问题会话与 SQL。

四 善后验证与长期监控

  • 验证:确认实例为 OPEN、监听正常、关键业务可连接;复核 alert.log 无新错误;对比优化前后 AWR/ASH 指标与等待事件。
  • 临时与根本:必要时采取杀阻塞会话限流SQL 改写/索引优化参数调整等临时措施;随后完成根因修复并回归验证。
  • 监控与预防:建立对CPU/内存/IO/网络表空间使用告警日志的持续监控与基线对比;保留常用 SQL 脚本与回滚预案,便于快速处置复发问题。

0