Linux Oracle如何进行故障排除
导读:Linux Oracle故障排除实战手册 一 快速定位流程 明确现象与影响范围:记录时间、持续时间、报错码、影响用户/应用。 检查实例与监听: 以管理员身份登录:sqlplus / as sysdba,执行 SELECT status...
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 tnslsnr;netstat -an |
| 连接超时(ORA-12170、TNS-12535) | ping <
IP>
;telnet <
IP>
1521;tnsping <
服务名>
;检查 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.ora 的 SQLNET.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 -h、swapon --show、grep -i "oom|kill" /var/log/messages;df -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 -h、swapon --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> 1521、firewall-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 错误建立告警与根因复盘机制。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Oracle如何进行故障排除
本文地址: https://pptw.com/jishu/779952.html
