Linux Oracle故障诊断思路
导读:Linux Oracle故障诊断思路 一 快速定位与信息收集 明确现象与影响范围:记录故障的发生时间、持续时长、影响业务/会话比例,优先抓取当前CPU、内存、I/O、网络等系统指标与应用响应时间。 查看告警与跟踪:优先检查数据库alert...
Linux Oracle故障诊断思路
一 快速定位与信息收集
- 明确现象与影响范围:记录故障的发生时间、持续时长、影响业务/会话比例,优先抓取当前CPU、内存、I/O、网络等系统指标与应用响应时间。
- 查看告警与跟踪:优先检查数据库alert.log与对应trace文件,定位首次报错与关键堆栈;ADR 统一目录通常为:$ORACLE_BASE/diag/rdbms/< db_name> /< instance_name> /trace/alert_< instance_name> .log,可用 SQL 查询:show parameter diagnostic_dest; 与 select value from v$diag_info where name=‘Diag Trace’; ;必要时用 adrci 浏览与打包日志。
- 操作系统侧线索:同步检查 /var/log/messages、syslog、dmesg,关注与 Oracle 进程、磁盘、内存、OOM、设备掉线等相关的告警。
二 分层排查路径
- 连接与会话
- 监听器:执行 lsnrctl status,查看服务注册与端口;异常时检查 $ORACLE_HOME/network/log/listener.log,必要时 lsnrctl stop/start;确认 1521 端口与防火墙策略。
- 连通性:使用 tnsping < 服务名> ;网络测试用 ping/telnet 1521;排查超时可调整 sqlnet.ora 的 SQLNET.INBOUND_CONNECT_TIMEOUT / SQLNET.SEND_TIMEOUT / SQLNET.RECV_TIMEOUT。
- 连接数:关注 ORA-12516/12518/12519,统计会话与上限:SELECT COUNT(*) FROM v$session; SHOW PARAMETER processes; SHOW PARAMETER sessions; 并按用户/模块聚合定位异常来源。
- 认证与账户:处理 ORA-28040(认证协议不匹配) 与 ORA-01017/ORA-28000(密码错误/账户锁定),检查 SQLNET.ALLOWED_LOGON_VERSION_SERVER 与用户状态/策略。
- 实例可用性
- 实例状态:以 sqlplus / as sysdba 登录,执行 SELECT status FROM v$instance; ;若不可用,优先查看 alert.log 的启动失败原因(参数、控制文件、数据文件、归档/空间等)。
- 性能与阻塞
- 工作负载与等待:生成 AWR/ASH 报告,识别 Top SQL、CPU/IO/锁等待热点;结合 v$session、v$lock、v$sql 定位阻塞链与会话状态。
- SQL 诊断:对可疑 SQL 开启 SQL Trace 并用 tkprof 分析,验证计划与成本。
三 常见故障场景与要点
| 场景 | 关键线索 | 快速验证 | 处理要点 |
|---|---|---|---|
| 新连接被拒绝(ORA-12516/12518/12519) | 应用报连接拒绝/超时 | 统计会话与上限、按用户/模块聚合 | 临时 kill 空闲/异常会话;优化连接池;必要时调高 processes/sessions(需重启) |
| 监听不可用(TNS-12541) | 应用无法连库 | lsnrctl status、listener.log、端口占用 | 重启监听;核对 listener.ora;排查防火墙/端口 |
| 连接超时(ORA-12170/TNS-12535) | 偶发或跨网段慢 | ping/telnet/tnsping、sqlnet.ora 超时 | 调整 inbound_connect/send/recv 超时;检查网络设备/ACL |
| 认证失败(ORA-28040/ORA-01017/ORA-28000) | 升级/客户端混用后集中报错 | 查用户状态与密码版本、sqlnet 配置 | 设置 SQLNET.ALLOWED_LOGON_VERSION_SERVER;解锁/重置密码;必要时客户端升级 |
| 数据库不可用(ORA-01034/ORA-27101) | 实例未启动或共享内存异常 | sqlplus 查状态、alert.log 首错 | 依据 alert 修复根因(参数/文件/归档/空间),再启动实例 |
| 归档空间满(ORA-00257) | 写入归档失败、日志切换报错 | 查归档目录使用率与磁盘 | 清理过期归档、扩容磁盘或调整归档路径;必要时临时切换至可用磁盘 |
四 数据保护与恢复要点
- 日志优先:任何变更前先备份 alert.log、当前 controlfile、参数文件(spfile/pfile) 与关键 trace,便于回滚与复盘。
- 空间与 I/O:快速巡检 $ORACLE_BASE、$ORACLE_HOME、归档目录、数据文件所在文件系统 的可用空间与健康状态,避免因 磁盘满/I/O 错误 引发级联故障。
- 备份可用性:确认 RMAN 备份集/归档日志的可用性与保留策略;在恢复前先在测试环境演练关键步骤,减少二次风险。
- 变更可控:参数调整、对象重建、版本升级等操作遵循变更窗口与回退方案,变更后持续观察 alert.log 与监控指标至少一个业务周期。
五 常用命令与 SQL 速查
- 日志与诊断
- 查看诊断根与路径:show parameter diagnostic_dest;
- 定位 alert 与 trace:select value from v$diag_info where name=‘Diag Alert’; / ‘Diag Trace’;
- 打包与查看日志:adrci> show alert; adrci> show trace; (必要时 adrci> pack)
- 监听与网络
- 监听状态与日志:lsnrctl status;查看 $ORACLE_HOME/network/log/listener.log
- 连通性测试:tnsping < 服务名> ;telnet 1521;必要时调整 sqlnet.ora 超时参数
- 会话与连接
- 会话与上限:SELECT COUNT(*) FROM v$session; SHOW PARAMETER processes; SHOW PARAMETER sessions;
- 按用户/模块聚合:SELECT username, status, COUNT(*) FROM v$session GROUP BY username, status;
- 按主机/程序聚合:SELECT machine, program, COUNT(*) FROM v$session GROUP BY machine, program;
- 终止阻塞会话:ALTER SYSTEM KILL SESSION ‘sid,serial#’;
- 性能与 SQL
- 生成 AWR/ASH 报告(典型间隔 1 小时/10 分钟),定位 Top SQL 与等待事件
- SQL Trace 与格式化:tkprof 分析执行计划与耗时分布
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Oracle故障诊断思路
本文地址: https://pptw.com/jishu/777755.html
