温馨提示×

Linux Oracle如何进行故障排除

小樊
43
2025-12-24 10:00:05
栏目: 云计算

Linux Oracle故障排除实战手册

一 快速定位流程

  • 明确现象与影响范围:记录时间、持续时间、报错码、影响用户/应用
  • 检查实例与监听:
    • 以管理员身份登录:sqlplus / as sysdba,执行 SELECT status FROM v$instance; 查看实例状态。
    • 检查监听:lsnrctl status,必要时 lsnrctl start
  • 查看告警日志:优先打开 Alert 日志,路径通常为:$ORACLE_HOME/diag/rdbms/<db_name>/<inst_name>/trace/alert_<inst_name>.log,用 tail -f 实时跟踪。
  • 系统层面取证:检查 /var/log/messages、syslog、dmesg,关注 OOM、磁盘满、重启 等系统事件。
  • 定位到具体原因后,先采取临时缓解(如释放阻塞会话、放宽超时),再实施根本修复(参数调整、SQL优化、资源扩容),最后回归验证与持续监控。
  • 性能类问题:生成 AWR/ASH 报告,结合 v$session、v$lock、v$sql 等视图确认瓶颈与等待事件。

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

症状/错误码 快速检查 处置要点
监听未启动/端口不通(TNS-12541、ORA-12560) lsnrctl status;`ps -ef grep tnslsnrnetstat -an
连接超时(ORA-12170、TNS-12535) ping <IP>telnet <IP> 1521tnsping <服务名>;检查 sqlnet.ora 超时 调整 SQLNET.INBOUND_CONNECT_TIMEOUT/SQLNET.SEND_TIMEOUT/SQLNET.RECV_TIMEOUT(如 120 秒);排查网络设备/防火墙会话超时
连接数上限(ORA-12516/12518/12519) SELECT COUNT(*) FROM v$session;SHOW PARAMETER processes; SHOW PARAMETER sessions;;按用户/模块统计 终止无用 INACTIVE 会话:ALTER SYSTEM KILL SESSION 'sid,serial#';适度调大 processes/sessions(需重启);应用侧优化连接池与泄漏
认证协议不匹配(ORA-28040) SELECT username, password_versions FROM dba_users WHERE username='xxx';sqlnet.oraSQLNET.ALLOWED_LOGON_VERSION_SERVER 服务端设置 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; 重置密码:ALTER USER xxx IDENTIFIED BY 新密码; 视需要调整密码策略
数据库不可用(ORA-01034、ORA-27101) sqlplus / as sysdba 查实例状态;lsnrctl status 看服务注册 启动实例 startup;若失败,立刻查看 Alert 日志 定位根因
修改 SGA/PGA 后无法启动 检查系统 OOM 与磁盘空间;free -hswapon --showgrep -i "oom|kill" /var/log/messagesdf -h 临时扩容 Swap 恢复实例;将内存管理改为手工并下调 sga_target/pga_aggregate_target,遵循 SGA+PGA ≤ 物理内存的约 80% 的经验值,再逐步调优

三 日志与诊断工具

  • Alert 日志与 Trace:优先查看 Alert 日志 获取启动/关闭/错误堆栈;Trace 文件位于 diag/rdbms/<db>/<inst>/trace/,用于深入诊断。
  • 监听日志:路径 $ORACLE_HOME/network/log/listener.log,用于分析连接请求与监听异常。
  • 系统日志:检查 /var/log/messages、syslog、dmesg,定位 OOM、磁盘满、重启等系统诱因。
  • 命令行快速检索:
    • 错误码聚合:grep "ORA-" /path/to/logs | awk '{print $0}' | sort | uniq -c | sort -nr
    • 时间窗筛选:sed -n '/Nov 27 14:/,/Nov 27 15:/p' /var/log/messages
  • Oracle 诊断:使用 ADRCI 统一查看告警/跟踪;性能问题生成 AWR/ASH 报告,结合 v$session、v$lock、v$sql 定位等待与热点 SQL;SQL 级别用 tkprof 分析执行计划与耗时。

四 系统资源与环境检查

  • 内存与交换:
    • 检查:free -hswapon --show
    • OOM 取证:grep -i "oom\|kill" /var/log/messages | grep -i oracle
    • 临时扩容 Swap(示例 4GB):
      dd if=/dev/zero of=/tmp/swapfile bs=1G count=4
      chmod 600 /tmp/swapfile
      mkswap /tmp/swapfile
      swapon /tmp/swapfile
      
  • 磁盘空间:df -h,关注 归档、数据文件、日志 所在分区是否已满。
  • 网络与防火墙:
    • 端口连通:telnet <IP> 1521firewall-cmd --list-all(或 iptables -S
    • 监听与注册:lsnrctl status 确认服务已注册到监听
  • 环境变量与命令可用性:确保 ORACLE_HOME、ORACLE_SID、PATH 正确;sqlplus、lsnrctl、emctl 等应在 PATH 中可直接执行。

五 安全与变更建议

  • 连接治理:设置合理的最大连接数,应用侧使用连接池并防止连接泄漏;定期清理 INACTIVE 会话。
  • 密码与认证:避免长期使用过期策略导致批量锁定;必要时调整 SQLNET.ALLOWED_LOGON_VERSION_SERVER 兼容老旧客户端,同时推动客户端升级。
  • 内存与参数:SGA/PGA 调整遵循“不超过物理内存约 80%”的经验值,变更前在测试环境验证,变更时先保留回退方案(SPFILE 备份、可回滚参数)。
  • 防火墙与端口:仅开放必要端口(如 1521),变更后及时验证内外网连通性。
  • 审计与巡检:定期巡检 Alert 日志、监听日志、系统日志,对高频 ORA 错误建立告警与根因复盘机制。

0