SELECT username, sid, serial# FROM v$session;
ALTER SYSTEM KILL SESSION 'sid,serial#';
標記該 Session 為「KILLED」,待其釋放鎖後終止。若長時間未生效,轉用強制手段。
-- 1. 取得 OS 進程號 (SPID)
SELECT p.spid
FROM v$session s, v$process p
WHERE s.sid = 21 -- 目標 SID
AND s.paddr = p.addr;
-- 2. OS 層面強制殺掉
kill -9
注意:kill -9 會留下殘留鎖定,需後續檢查 v$lock 並必要時重啟實例。
#!/bin/ksh
# kill_long_running.sh : 終結執行超過 1 小時的非系統查詢
sqlplus -s / as sysdba < 3600;
SPOOL OFF
EXIT
EOF
# 執行生成的指令
sqlplus -s / as sysdba @/tmp/kill_sid.lst
連接管理遵循「優雅優先、強制備用、記錄審計」原則。建議將上述邏輯封裝為監控平台自動化動作,並配合 Resource Manager 限制失控查詢資源佔用。