用戶進程掛起或過度佔用資源導致其他 Session 無法工作。DBA 仍能連線資料庫時,標準處理流程:
-- 1. 定位問題進程
SELECT s.username, s.osuser, s.sid, s.serial#, p.spid
FROM v$session s, v$process p
WHERE s.paddr = p.addr AND s.username IS NOT NULL;
-- 2. 正常終止
ALTER SYSTEM KILL SESSION 'sid,serial#';
-- 例:ALTER SYSTEM KILL SESSION '9,203';
ps -ef | grep oracle 定位 OS PID → kill -9 spid 強制終止背景進程。
Windows 下 Oracle 單一進程 ORACLE.EXE,用戶連線以**執行緒**形式存在。任務管理員僅顯示進程與執行緒數,**無法識別個別執行緒**。強制結束進程會導致所有用戶與背景執行緒中斷,引發資料庫崩潰。
$ORACLE_HOME/bin/orakill.exe
需從 Microsoft Resource Kit 獲取:
用於顯示屬於 ORACLE.EXE 進程的所有執行緒及其 ID。
orakill
# 例:
orakill ORCL 2760
# 回應:Kill of thread id 2760 in instance ORCL successfully signalled.
參數對應:SID = 執行個體名,SPID = 執行緒 ID(十進位)。
| 方法 | 適用場景 | 風險等級 | 資源釋放速度 |
|---|---|---|---|
| ALTER SYSTEM KILL SESSION | 資料庫可連線、常規管理 | 低 | Session 逾時後 |
| Unix kill -9 | Unix 環境、資料庫無回應 | 中 | 即時 |
| OraKill | Windows 環境、資料庫無回應 | 高 | 即時 |
OraKill 是 Windows 環境下的「核彈級」工具,務必謹慎使用,並建立完整的操作審核與事後複盤機制。