首页主机资讯Linux中Oracle数据库的故障排查步骤

Linux中Oracle数据库的故障排查步骤

时间2026-01-21 21:52:04发布访客分类主机资讯浏览606
导读:Linux 下 Oracle 数据库故障排查步骤 一 快速定位与信息收集 明确问题范围与发生时间:是实例无法启动、连接失败、性能骤降,还是高可用切换异常;记录影响范围与持续时间。 检查实例存活:ps -ef | grep pmon 查看对...

Linux 下 Oracle 数据库故障排查步骤

一 快速定位与信息收集

  • 明确问题范围与发生时间:是实例无法启动、连接失败、性能骤降,还是高可用切换异常;记录影响范围与持续时间。
  • 检查实例存活:ps -ef | grep pmon 查看对应 SID 的进程是否存在。
  • 查看告警日志:tail -n 200 $ORACLE_BASE/diag/rdbms///trace/alert_*.log,优先从最近报错入手。
  • 系统资源快检:top/vmstat 1 5/iostat -x 1 3/sar -u 1 3,关注 CPU、内存、I/O 是否异常。
  • 网络连通与监听:tnsping 服务名、lsnrctl status 检查监听是否运行与端口(默认 1521)可达。
  • 环境校验:echo $ORACLE_HOME $ORACLE_SID $PATH,确保客户端与服务器端环境变量一致。
  • 防火墙与安全组:确认 1521 等端口已放行(iptables/firewalld/云安全组)。

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

  • 实例无法启动
    1. 以 sysdba 登录:sqlplus / as sysdba;先 shutdown abort(必要时),再 startup。
    2. 异常关闭残留导致独占/资源未释放:检查并清理 $ORACLE_HOME/dbs 下的 lk*、sgadef.dbf;用 ipcs -m/-s 查找 Oracle 的共享内存与信号量,必要时 ipcrm -m / ipcrm -s 后重启。
    3. 内核参数不足:检查 kernel.shmmax/shmall、kernel.sem;临时 sysctl -w 调整,永久写入 /etc/sysctl.conf 并执行 sysctl -p。
    4. 资源不足或 OOM:free -m、dmesg | grep -i oom;降低 SGA/PGA 或扩容内存。
  • 监听与连接失败
    1. 监听未起:lsnrctl start;状态异常:lsnrctl status 查看端口与服务映射。
    2. 客户端报错:
      • ORA-12541 TNS:no listener:监听未启动或端口不对;
      • ORA-12560 TNS:protocol adapter error:实例未启动或 ORACLE_SID/环境变量异常。
    3. 配置与连通:核对 listener.ora/tnsnames.ora 的服务名与端口;tnsping 测试;服务器与客户端防火墙放行 1521
  • 性能瓶颈与阻塞
    1. 快速定位:v$session 看 WAITING/ACTIVE 与 blocking_session;v$lock、v$sql 找高耗 SQL 与锁等待。
    2. 深度分析:AWR/ASH 报告识别 Top SQL 与主要等待事件(如 db file sequential read、log file sync、enq: TX 等);必要时 SQL Trace + tkprof。
    3. 自动诊断:ADDM 基于 Database Time 给出瓶颈与可操作建议,优先处理影响最大的问题。

三 关键命令与脚本清单

  • 实例与监听
    • sqlplus / as sysdba(启动/关闭/状态查询)
    • lsnrctl status/start/stop
    • tnsping < 服务名>
  • 日志与诊断
    • tail $ORACLE_BASE/diag/rdbms///trace/alert_*.log
    • adrci(ADR 命令行,收集/查看诊断数据)
  • 资源与 IPC
    • ipcs -m/-s;ipcrm -m / -s
    • free -m;dmesg | grep -i oom
    • sysctl -a | grep shm / sem;sysctl -w;编辑 /etc/sysctl.conf
  • 性能与 SQL
    • AWR:@$ORACLE_HOME/rdbms/admin/awrrpt.sql
    • 活跃会话与等待:
      • SELECT event, wait_class, COUNT() FROM v$session WHERE state=‘WAITING’ GROUP BY event, wait_class ORDER BY COUNT() DESC;
      • SELECT sid, username, status, event, blocking_session FROM v$session WHERE status=‘ACTIVE’;
    • 锁与阻塞:SELECT * FROM dba_blockers; SELECT * FROM dba_waiters;
    • Top SQL:
      • SELECT sql_id, executions, elapsed_time/executions avg_elapsed, sql_text FROM v$sql WHERE executions> 0 ORDER BY avg_elapsed DESC FETCH FIRST 10 ROWS ONLY;
    • SQL Trace:ALTER SESSION SET sql_trace=true; 使用 tkprof 分析。

四 高可用与集群场景补充

  • Oracle RAC
    • 集群状态:crsctl check cluster;crsctl status resource -t
    • 日志定位:$GRID_HOME/log//crsd/crsd.log 与 $GRID_HOME/log//cssd/ 等
    • 常见原因:心跳/网络异常、节点内核 panic、SGA 抢占导致 instance evicted,按日志与 CRS 资源状态逐一排查。
  • Data Guard
    • 角色与切换:SELECT DATABASE_ROLE, SWITCHOVER_STATUS FROM v$database;
    • 同步与归档:SELECT DEST_ID, ERROR FROM v$archive_dest; SELECT SEQUENCE#, APPLIED FROM v$archived_log WHERE DEST_ID=2;
    • 处理方向:核对主备监听、网络、归档路径与权限、磁盘空间、日志应用延迟。

五 处置规范与风险控制

  • 变更可控:一次只改一件事,变更前保存当前参数与执行计划,变更后复核效果。
  • 影响评估:在业务低峰期执行重启/切换;必要时准备回退方案与沟通窗口。
  • 证据留存:保留 alert.log、AWR/ASH、trace、ipcs/系统日志等关键信息,便于复盘。
  • 根因修复与预防:优化高耗 SQL、调整 SGA/PGA/参数、补齐索引/统计信息、完善监控与基线;对 RAC/Data Guard 建立例行巡检与演练机制。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux中Oracle数据库的故障排查步骤
本文地址: https://pptw.com/jishu/789142.html
如何在Linux上配置Oracle的高可用性 如何优化Linux上Oracle数据库的查询性能

游客 回复需填写必要信息