Oracle 数据库 SHUTDOWN IMMEDIATE 卡住无法关闭的解决方法
问题描述
在 UAT 环境关闭 Oracle 数据库时,执行 SHUTDOWN IMMEDIATE 后一直无响应,命令卡住不返回。
排查过程
第一步:检查活跃会话
SELECT SID, SERIAL#, STATUS, EVENT, SECONDS_IN_WAIT, BLOCKING_SESSION
FROM V$SESSION
WHERE STATUS='ACTIVE'
AND SID != (SELECT SID FROM V$SESSION WHERE AUDSID=SYS_CONTEXT('USERENV','SESSIONID'));
第二步:分析结果
从查询结果可以看到:
| SID | SERIAL# | EVENT | BLOCKING_SESSION |
|-----|---------|-------|------------------|
| 3 | 40787 | LGWR worker group idle | 3218 |
| 5649 | 38464 | LGWR worker group idle | 3218 |
关键发现:SID 3 和 SID 5649 被 SID 3218 阻塞,导致整个数据库无法完成 checkpoint 和关闭流程。
第三步:强制杀掉阻塞会话
ALTER SYSTEM KILL SESSION '3,40787' IMMEDIATE;
ALTER SYSTEM KILL SESSION '5649,38464' IMMEDIATE;
SHUTDOWN IMMEDIATE;
第四步:如果杀不掉,直接 ABORT
SHUTDOWN ABORT;
⚠️ 注意:SHUTDOWN ABORT 相当于突然断电,未提交的事务会丢失,UAT 环境专用。
正确关闭顺序(推荐)
- 先 kill 掉所有 Java 应用进程
- 确认无活跃连接后再执行数据库关闭
SHUTDOWN IMMEDIATE
结论
Oracle SHUTDOWN IMMEDIATE 卡住的根本原因是:还有未释放的数据库会话被阻塞,导致 LGWR 无法完成 checkpoint,整个关闭流程卡死。解决思路是查出活跃会话 → 找出 BLOCKING_SESSION → 杀掉阻塞会话 → 重新执行关闭。
0 Comments latest
No comments.