😱 惊魂时刻:数据库不动了!
你是否经历过这样的场景:
业务高峰期,电话突然被打爆,应用端一片哀嚎:“系统卡死了!”、“点什么都没反应!”。你火急火燎地登录数据库,发现性能极度缓慢,甚至连 sqlplus 都登录不进去。
这时候,你的额头开始冒汗。是死锁?是资源耗尽?还是某个进程堵住了所有人的路?
别慌!作为 Oracle DBA,你手里还有一张王牌——Hanganalyze。
今天我们就来深入扒一扒这个“数据库听诊器”,教你在数据库“假死”(Hang)时,如何快速定位病灶,从容救火。
🧐 什么是 Hanganalyze?
简单来说,Hanganalyze 是 Oracle 提供的一种自我诊断功能。
当数据库因为挂起(Hang)导致严重性能问题时,它就像一张复杂的“X光片”。它能帮你理清数据库内部错综复杂的进程关系,快速告诉你:
-
是不是有两个或多个进程发生了死锁? -
是谁堵住了路(Holder)? -
又有多少无辜的进程被堵在了后面(Waiter)?
通过分析 Hanganalyze 生成的 Trace 文件,我们就能决定下一步是杀掉某个进程,还是需要更深入的 Systemstate Dump。
🛠️ 实战操作:如何收集信息?
使用 Hanganalyze 的方法其实非常简单,但魔鬼都在细节里。
1️⃣ 登录数据库(关键一步!)
通常我们使用以下命令登录:
sqlplus / as sysdba
⚠️ 但是! 如果数据库已经 Hang 得很厉害,普通连接可能根本进不去,或者卡在登录界面。这时候,你需要走“后门”——使用 Pre-liminary Connection(预连接)。
# 适用于 11g 以前版本,当普通连接失效时使用
sqlplus -prelim / as sysdba
💡 原理小贴士:
使用-prelim参数时,Oracle 不会真正创建一个完整的 Session,但允许你有限地访问 SGA(系统全局区)。这就好比正门堵死了,你通过通风管道爬进去,虽然不能干所有事,但足够让你运行诊断工具了。
2️⃣ 开始收集(Oradebug 大法)
成功进入后,我们使用 oradebug 工具来收集信息。请按顺序执行以下命令:
第一步:绑定进程并解除限制
SQL> oradebug setmypid
-- 提示: Statement processed.
SQL> oradebug unlimit
-- 提示: Statement processed.
第二步:执行第一次快照
这里我们将级别设为 3(通常足够用于分析)。
SQL> oradebug hanganalyze 3
第三步:让子弹飞一会儿(非常重要!)
不要急着做下一步。请等待 2-3 分钟。
我们需要时间跨度来观察进程状态的变化。
第四步:执行第二次快照
SQL> oradebug hanganalyze 3
为什么要收集两次?
只有通过对比两个时间点的快照,我们才能确认哪些等待是“持续”的,从而准确判断是不是真的 Hang 住了,而不是短暂的慢。
第五步:找到你的“诊断报告”
SQL> oradebug tracefile_name
-- 结果示例: /usr/app/oracle/admin/orcl/bdump/orcl_diag_8010.trc
拿着这个路径下的 .trc 文件,你就可以开始分析了(或者发给 Oracle 原厂支持)。
第六步:退出
SQL> exit
⚠️ 高能预警:版本陷阱
在使用-prelim参数时,有一个巨大的坑需要注意,很多老司机都踩过:
🔴 在 Oracle 11.2 及以上版本中,收集 Hanganalyze 信息时,请谨慎使用-prelim选项。
根据经验及官方文档,高版本中在 -prelim 模式下收集 Hanganalyze 可能会遇到限制或无法收集到完整信息的情况。如果你使用的是 11.2+ 版本,建议先尝试普通连接;如果必须使用 prelim,请结合Systemstate dump使用或参考最新的 MOS 文档。
📚 进阶学习
如果你想对数据库 Hang 问题有更深入的研究,强烈推荐阅读 Oracle 官方支持文档:
MOS Doc ID 452358.1: How to Collect Diagnostics for Database Hanging Issues
📝 总结
数据库 Hang 住时,心态要稳,动作要快。
-
尝试登录:普通登录不行就上 -prelim(注意版本差异)。 -
收集信息: oradebug hanganalyze 3,记得做两次,中间停顿 2-3 分钟。 -
定位文件:找到 Trace 文件进行分析。
掌握了这个技能,下次面对系统“假死”,你就不再是束手无策的看客,而是能够迅速切入病灶的“手术刀”!
本文参考自墨天轮技术社区中我原来写的一篇文章(https://www.modb.pro/db/15330),重写了一篇。
想了解更多干货,可通过下方扫码关注

可扫码添加上智启元官方客服微信👇

17认证网








