温馨提示×

Linux中Oracle故障怎么排查

小樊
44
2025-11-28 20:03:39
栏目: 云计算

Linux 下 Oracle 故障排查实战手册

一 快速定位与最小排查闭环

  • 明确现象与影响范围:记录故障的时间点持续时间影响用户/业务,同步观察CPU、内存、I/O、网络等系统指标与应用响应。
  • 检查实例与监听:
    • 查看实例进程:ps -ef | grep pmon;确认是否已有同名实例在运行。
    • 登录实例:sqlplus / as sysdba;执行 startup(nomount/mount/open)观察停在哪一阶段。
    • 检查监听:lsnrctl status;必要时 lsnrctl start。
  • 立刻查看告警日志:定位 $ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log,优先从最近的错误行向上追溯,记录ORA-错误码与触发的trace 文件名
  • 若涉及连接问题,检查监听日志:$ORACLE_BASE/diag/tnslsnr//listener/trace/listener.log,关注 TNS-12541 无监听、TNS-01153 配置解析失败等。
  • 初步验证:问题解决后,确认 select instance_name, status from v$instance; 为 OPEN,并持续观察一段时间。

二 日志体系与关键路径

日志类型 默认路径 典型用途与要点
数据库 Alert 日志 $ORACLE_BASE/diag/rdbms///trace/alert_.log 启动/关闭、空间分配、恢复、错误与ORA-码、关联trace文件
数据库 Trace 文件 同上目录 按进程/会话生成,配合 Alert 日志定位具体堆栈与等待事件
监听日志 $ORACLE_BASE/diag/tnslsnr//listener/trace/listener.log 连接请求与失败原因,关注 TNS-12541/01153
集群 Alert 日志 $ORACLE_CRS_HOME/log//alert.log CRS 资源、节点驱逐、网络/磁盘心跳问题
CRS/CSS 日志 $ORACLE_CRS_HOME/log//{crsd,ocssd}/ 资源启动失败、心跳超时等
ASM 日志与磁盘组 $ORACLE_BASE/diag/asm/+asm/+ASM*/trace/alert_+ASM*.log ORA-15025/ORA-15042 等磁盘/权限/多路径问题
ADR 与 AWR/ASH ADR 根由 V$DIAG_INFO 给出 使用 adrci 管理事件/日志;AWR/ASH 做性能瓶颈与等待分析
以上路径在不同版本/安装方式下可能略有差异,建议用 adrci 或 V$DIAG_INFO 确认实际路径。

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

  • 实例无法启动(挂载/打开阶段失败)
    • 先看 alert.log 中最近的错误与触发的 trace;若提示 SGA/PGA/内存不足,考虑降低 SGA_TARGET 或释放系统内存。
    • 典型错误:
      • ORA-27102: out of memory / ORA-04031:共享内存不足,检查并调整内核参数(如 kernel.shmmax/shmall、semmni 等)与 SGA/PGA 配置。
      • ORA-27101: shared memory realm does not exist:共享内存段异常,确认无残留实例后清理 IPC 再启。
  • 监听与连接异常
    • TNS-12541 无监听:执行 lsnrctl start;检查监听端口与监听名。
    • TNS-12154 无法解析连接标识符:检查 tnsnames.ora 与服务别名。
    • 监听日志过大(如超过4GB)导致新连接失败:备份后清空 listener.log 再观察。
  • 归档/空间问题
    • 归档失败或空间满:检查 log_archive_dest_n 目录,清理过期归档与无用 trace,确保磁盘余量。
  • RAC/ASM/集群异常
    • 使用 crsctl check cluster -all、srvctl status database -d 检查资源;
    • 关注 CRS-ORA-150xx(ASM 磁盘/权限/多路径),必要时检查 multipath 与磁盘权限,尝试 alter diskgroup mount。

四 性能与锁等待排查

  • 快速定位会话与锁:
    • 查当前会话与等待:select sid, serial#, username, event, blocking_session, seconds_in_wait from v$session where wait_class != ‘Idle’;
    • 查锁与对象:select * from v$lock where block > 0; 关联 dba_objects 定位表/索引。
  • 生成与解读报告:
    • AWR/ASH:@?/rdbms/admin/awrrpt.sql、@?/rdbms/admin/ashrpt.sql,识别Top SQL等待事件资源争用
    • SQL Trace 与 tkprof:对问题 SQL 启用跟踪,使用 tkprof 格式化分析执行计划与耗时。
  • 系统层面:结合 top/htop、vmstat、iostat 观察CPU、内存、I/O瓶颈,必要时联动业务侧限流或 SQL 优化。

五 系统资源与内核参数检查

  • 内存与 OOM:free -m;dmesg | grep -i oom 检查是否被 OOM Killer 终止。
  • 共享内存与信号量:
    • 查看:cat /proc/sys/kernel/{shmmax,shmall};sysctl -a | grep sem
    • 临时调整(示例):sysctl -w kernel.shmmax=8589934592;sysctl -w kernel.shmall=2097152;sysctl -w kernel.sem=“250 32000 100 128”
    • 永久调整:写入 /etc/sysctl.conf 后执行 sysctl -p。
  • IPC 资源清理(确保实例不在运行):
    • ipcs -m | grep oracle | awk ‘{print $2}’ | xargs -n 1 ipcrm -m
    • ipcs -s | grep oracle | awk ‘{print $2}’ | xargs -n 1 ipcrm -s
  • 环境与健康:确认 ORACLE_HOME、ORACLE_SID、PATH 正确;检查磁盘空间与关键目录权限。

0