温馨提示×

Linux Oracle故障如何快速排查

小樊
45
2025-11-22 21:35:47
栏目: 云计算

Linux Oracle故障快速排查清单

一 快速定位路径

  • 明确现象与影响范围:记录时间、持续时间、报错码、影响业务,优先判断是实例不可用、监听异常、连接失败还是性能劣化
  • 检查实例状态:登录数据库主机,执行sqlplus / as sysdba,查询SELECT status FROM v$instance;,确认是否为OPEN
  • 查看告警日志:优先打开alert_SID.log,路径可通过SELECT value FROM v$diag_info WHERE name='Diag Alert';获取;同时关注$ORACLE_BASE/diag/rdbms/<dbname>/<inst>/trace/下的traceincident文件。
  • 检查监听:lsnrctl status查看服务注册与端口,监听日志位于$ORACLE_HOME/network/log/listener.log
  • 系统层面:用top/vmstat/iostat/df -h排查CPU、内存、I/O、磁盘空间;查看系统日志/var/log/messagessyslogdmesg是否有与Oracle或资源相关的错误。
  • 网络连通:对数据库IP执行pingtelnet <IP> 1521,应用端可用tnsping <服务名>验证TNS解析与连通性。

二 常见故障与处置

症状与错误码 快速检查 立即处置
数据库不可用 ORA-01034 / ORA-27101 sqlplus / as sysdba查实例状态;lsnrctl status看是否注册服务 若实例未启动:startup;若监听异常:lsnrctl stoplsnrctl start;必要时查看alert_SID.log定位启动失败原因
监听问题 TNS-12541 / TNS-12500 lsnrctl status;`ps -ef grep tnslsnrnetstat -an
连接数打满 ORA-12516 / 12518 / 12519 SELECT COUNT(*) FROM v$session;SHOW PARAMETER processes;SHOW PARAMETER sessions;;按用户/模块统计连接 终止阻塞或长时间空闲会话:ALTER SYSTEM KILL SESSION 'sid,serial#'; 适度调大processes/sessions(需重启);应用侧优化连接池
连接超时 ORA-12170 / TNS-12535 pingtelnet <IP> 1521tnsping <服务名>;检查sqlnet.ora超时参数 调整SQLNET.INBOUND_CONNECT_TIMEOUTSQLNET.SEND_TIMEOUTSQLNET.RECV_TIMEOUT;排查网络设备/防火墙
认证协议不匹配 ORA-28040 查询用户密码版本:SELECT username, password_versions FROM dba_users WHERE username='xxx';;检查sqlnet.ora 服务端设置SQLNET.ALLOWED_LOGON_VERSION_SERVER=11(按客户端兼容度设置);必要时重置用户密码以生成新版本
账号锁定/密码错误 ORA-01017 / ORA-28000 SELECT username, account_status, lock_date, expiry_date FROM dba_users WHERE username='xxx';;查看密码策略 解锁:ALTER USER xxx ACCOUNT UNLOCK; 重置密码;按需放宽PASSWORD_LIFE_TIME等策略

三 日志与诊断命令速查

  • 告警与跟踪:
    • 定位ADR:SELECT name, value FROM v$diag_info;(关注Diag Alert/Trace)。
    • 查看告警:tail -n 200 $ORACLE_BASE/diag/rdbms/<db>/<inst>/trace/alert_<inst>.log | egrep -i "ORA-|err|fail"
    • 跟踪文件:$ORACLE_BASE/diag/rdbms/<db>/<inst>/trace/<inst>_ora_<pid>.trc 与对应.trm
  • 监听:lsnrctl statustail -f $ORACLE_HOME/network/log/listener.log;核对$ORACLE_HOME/network/admin/listener.ora
  • 网络与TNS:pingtelnet <IP> 1521tnsping <服务名>firewall-cmd --list-all检查防火墙。
  • 会话与资源:
    • 连接数:SELECT COUNT(*) FROM v$session;SHOW PARAMETER processes;SHOW PARAMETER sessions;
    • 会话分布:SELECT username, status, COUNT(*) FROM v$session GROUP BY username, status ORDER BY 3 DESC;
    • 按主机/程序:SELECT machine, program, COUNT(*) FROM v$session GROUP BY machine, program ORDER BY 3 DESC;
  • 性能与SQL:生成AWR/ASH报告定位瓶颈;对问题SQL使用tkprof分析执行计划与耗时。

四 高频根因与预防要点

  • 资源与空间:磁盘满、内存/SGA不足会触发启动失败或异常;建立容量与I/O监控与告警,定期清理归档与trace。
  • 连接管理:连接泄漏或连接池上限过低导致ORA-12516/12518/12519;应用需设置合理的最大连接数与回收策略,数据库侧适度调参并清理INACTIVE会话。
  • 监听与防火墙:监听未起、配置错误或1521端口未放行导致TNS-12541;确保监听自动注册与防火墙策略正确。
  • 版本兼容:客户端/服务器版本差异引发ORA-28040;统一客户端版本或在服务端设置合适的SQLNET.ALLOWED_LOGON_VERSION_SERVER
  • 账号安全:密码过期或策略过严导致ORA-01017/ORA-28000;定期审计dba_usersdba_profiles,必要时解锁与调整策略。

0